2013-07-25 3 views
0

УчитываяCoffeeScript, экспортирующие классы имеют только супер функции

class Super: 

    constructor: (@params) -> 
    foo: -> 
     ... 

class Child extends Super: 

    internalFoo = -> 
     ... 

    internalBar : -> 
     ... 


(exports ? this).Super = Super 
(exports ? this).Child = Child 

Я знаю, что этот пример будет «загрязнять» глобальное пространство имен, но для простоты: я только в состоянии назвать foo() на Child

var c = new Child(); 
c.foo(); // works 
c.internalFoo(); // internalFoo is undefined 
c.internalBar(); // internalBar is undefined 

Что мне здесь не хватает? Я хотел бы запустить мой кофейный код в браузере.

+0

Где вы это используете? так как ваш второй фрагмент кода - это JavaScript (и вы используете 'export? this'), я бы предположил, что это браузер, не так ли? –

+0

Йоахим Зауэр - Да. Я добавил эту информацию на свой пост. – onigunn

ответ

2

Я могу позвонить внутреннийBar без проблем.

internalFoo не может быть вызван, поскольку вы не определяете его как функцию-член класса и функцию класса. определяя его с помощью «=», он будет доступен только в виде переменной, чтобы закрыть ее внутри тела класса.

Если вы хотите, чтобы сделать его метод класса определяют его как

class Child extends Super 
    @internalFoo: -> 

Что касается не будучи в состоянии назвать internalBar Я предполагаю, что вы имеете ошибку отступов и ваш internalBar определяется как Anon функция в пределах внутреннийFoo. , который, как сказано ранее, недоступен, так как вы не определили его как метод участника.

+0

robkuz - спасибо. +1 для удобства выполнения функций класса функций. – onigunn

Смежные вопросы