我有以下代码:
class Circle
constructor: (@center, @radius, @color) ->
@Red: (@center, @radius) ->
new @ center, radius, 'red'
class Point
constructor: (@x, @y) ->
我可以像这样创建红色圆圈:red_circle = Circle.Red(new Point(0,0), 10)
但是以下代码不起作用:
obj = Circle.Red
red_circle = obj(new Point(0,0), 10)
我做错了什么?
答案 0 :(得分:2)
Circle.Red(...)
将this
(@
)设置为Circle
;所以new @
= new Circle
。
obj(...)
未设置this
,因此new @
正在调用其他内容new
(具体取决于具体情况)。
您可以通过绑定来解决此问题:obj = Circle.Red.bind(Circle)
答案 1 :(得分:1)
当调用obj()
时,呼叫没有上下文;函数内部this
的含义是不是 Circle
,而是window
。您需要绑定上下文以保留它:
obj = Circle.Red.bind Circle