Coffeescript 继承:静态 variables/methods
Coffeescript Inheritance: Static variables/methods
在其他OOP语言中,以下是一种常见的抽象形式
class AbstractClass
myVar: null
@doSomething: ->
console.log myVar
class Child extends AbstractClass
myVar: 'I am a child'
调用 Child.doSomething() 应该打印 "I am a child"。
我还应该能够将 Child.doSomething 作为回调传递并让它打印相同的内容。 with或w/o@的所有组合我都试过了,用分号和等号来定义myVar,我想不通。在 CoffeeScript 中执行此操作的正确方法是什么?
编辑
我认为我过度简化了我的示例,因为我无法让它工作(进一步编辑:现在使用此解决方案)。这是真正的代码(带有建议的解决方案):
class AbstractController
@Model: null
@index: (req, res) ->
console.log @
console.log @Model
@Model.all?(req.params)
class OrganizationController extends AbstractController
@Model: require "../../classes/community/Organization"
在我的路由文件中
(express, controller) ->
router = express.Router({mergeParams: true})
throw new Error("Model not defined") unless controller.Model?
console.log controller
router
.get "/:#{single}", _.bind(controller.show, controller)
.get "/", _.bind(controller.index, controller)
.post "/", _.bind(controller.post, controller)
将 OrganizationController 传递给此函数会正确记录 OrganizationController 对象,所以我知道它到达那里:
{ [Function: OrganizationController]
Model: { [Function: Organization] ...},
index: [Function],
__super__: {} }
但是当我到达那条路线时,两个 console.log 调用打印出来
{ [Function: AbstractController]
Model: null,
index: [Function] }
null
我得到一个错误:"Cannot read property 'all' of null"
您遗漏了一些 @
。以下打印 I am a child
:
class AbstractClass
@myVar: null
@doSomething: ->
console.log @myVar
class Child extends AbstractClass
@myVar: 'I am a child'
Child.doSomething()
但是如果你想将它作为回调函数传递,你需要将它绑定到Child
:
callf = (f) ->
f()
callf Child.doSomething # prints undefined
callf Child.doSomething.bind(Child) # prints I am a child
在其他OOP语言中,以下是一种常见的抽象形式
class AbstractClass
myVar: null
@doSomething: ->
console.log myVar
class Child extends AbstractClass
myVar: 'I am a child'
调用 Child.doSomething() 应该打印 "I am a child"。 我还应该能够将 Child.doSomething 作为回调传递并让它打印相同的内容。 with或w/o@的所有组合我都试过了,用分号和等号来定义myVar,我想不通。在 CoffeeScript 中执行此操作的正确方法是什么?
编辑
我认为我过度简化了我的示例,因为我无法让它工作(进一步编辑:现在使用此解决方案)。这是真正的代码(带有建议的解决方案):
class AbstractController
@Model: null
@index: (req, res) ->
console.log @
console.log @Model
@Model.all?(req.params)
class OrganizationController extends AbstractController
@Model: require "../../classes/community/Organization"
在我的路由文件中
(express, controller) ->
router = express.Router({mergeParams: true})
throw new Error("Model not defined") unless controller.Model?
console.log controller
router
.get "/:#{single}", _.bind(controller.show, controller)
.get "/", _.bind(controller.index, controller)
.post "/", _.bind(controller.post, controller)
将 OrganizationController 传递给此函数会正确记录 OrganizationController 对象,所以我知道它到达那里:
{ [Function: OrganizationController]
Model: { [Function: Organization] ...},
index: [Function],
__super__: {} }
但是当我到达那条路线时,两个 console.log 调用打印出来
{ [Function: AbstractController]
Model: null,
index: [Function] }
null
我得到一个错误:"Cannot read property 'all' of null"
您遗漏了一些 @
。以下打印 I am a child
:
class AbstractClass
@myVar: null
@doSomething: ->
console.log @myVar
class Child extends AbstractClass
@myVar: 'I am a child'
Child.doSomething()
但是如果你想将它作为回调函数传递,你需要将它绑定到Child
:
callf = (f) ->
f()
callf Child.doSomething # prints undefined
callf Child.doSomething.bind(Child) # prints I am a child