2013-06-23 5 views
0

Я не могу точно понять, что @ (это) делает infront функций класса. Я использую структуру Spine, и я получил класс Contact, который расширяет Spine.model. Я переопределить методы Spine для создания, удаления, извлечения и т.д., и у них печать на консоли первой, как это:Назначение символа @ infront функций

create: -> 
    console.log('create') 
    super 

    destroy: -> 
    console.log("destroy") 
    super 

Некоторые из этих методов будет работать так же, если я добавлю @ Infront, например, создавать, в то время как другие не будут работать без @, а другие не будут работать с @. Все методы, которые я переопределяю, можно увидеть по ссылке выше.

Можно ли объяснить мне влияние символа @ infront на функции и почему он вызывает это поведение?

+1

'@ identifier' просто' this.identifier'. См. Http://coffeescript.org/#операторы. –

+0

Да, я понимаю, что он использует infront переменных, просто не то, что он делает перед функциями, и почему приведенные выше примеры ведут себя так. – Giannis

+0

@Glannis Некоторые функции - это методы экземпляра, тогда как другие - только локальные переменные. Можете ли вы указать на конкретный пример кода, который вызвал путаницу (отредактируйте вопрос)? –

ответ

0

Ответ от мю слишком коротка: Вы можете определить методы класса, предваряя их с @:

class Box2DUtility 
    constructor:() -> 
    @drawWorld: (world, context) -> alert 'World drawn! 

'

А потом нарисовать свой мир ...

Box2DUtility.drawWorld() 

Демонстрация: http://jsfiddle.net/ambiguous/5yPh7/

И если вы хотите, чтобы ваш drawWorld действовать как конструктор, то можно сказать, новый @ как это:

class Box2DUtility 
     constructor: (s) -> @s = s 
     m:() -> alert "instance method called: #{@s}" 
     @drawWorld: (s) -> new @ s 

Box2DUtility.drawWorld('pancakes').m() 

Демо: http://jsfiddle.net/ambiguous/bjPds/1/