2016-03-25 5 views
0

я следующий код:Javascript «Не Конструктор» Исключение

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

Circle.Red(...) комплекты this (@) до Circle; поэтому new @ = new Circle.

obj(...) не установлен this, так new @ является вызовом new на что-то другое (в зависимости от контекста).

Вы можете исправить это за счет связывания: obj = Circle.Red.bind(Circle)

1

При вызове в качестве obj(), нет никакого контекста для вызова; смысл this внутри функция нетCircle, но скорее всего window. Вам необходимо привязать контекст для его сохранения:

obj = Circle.Red.bind Circle 
Смежные вопросы