Javascript“不是构造函数”例外

时间:2016-03-25 08:23:14

标签: javascript coffeescript

我有以下代码:

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)

我做错了什么?

2 个答案:

答案 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