2013-02-24 2 views
1

Я использую coffeescript на передней панели в течение нескольких лет. И я знаком с синтаксисом класс ищет что-то вроде этого:Синтаксис класса Coffeescript отличается в узле?

class MyClass 
     methodOne : -> 
     console.log "methodOne Called" 
     methodTwo : (arg, arrg) -> 
     console.log "methodTwo Called" 

Недавно я играл с узлом и frappe шаблонного для веб-приложений с CoffeeScript и узлом.

Этот скрипт с использованием классов CoffeeScript для маршрутов со следующим синтаксисом:

class MyClass 
     @methodOne = -> 
     console.log "methodOne Called" 
     @methodTwo = (arg, arrg) -> 
     console.log "methodTwo Called" 

Единственное отличие использования я могу отметить, с моей нормальной эксплуатации, является то, что файл Routes.coffee потребляет класс напрямую, а не делает new объект. Итак:

MyClass.methodOne() 

    # vs 

    new MyClass().methodOne() 

Теперь я узнал, что синтаксис @methodOne не использует .prototype, а другой синтаксис делает. Но почему это приведет к сбою в использовании?

ответ

2

Итак, методы, которые начинаются с @, являются методами класса, где все остальное - это методы экземпляра. С примерами методов, : по существу означает общественность, где = означает частный. «Общественная» и «частная» дихотомия не существует с помощью методов класса в CoffeeScript, поэтому : и = делайте что-нибудь интересное. Они оба публичные.

Например, посмотрите на этот класс:

class MyClass 
    @methodOne = -> 
    @methodTwo : -> 
    methodThree : -> 
    methodFour = -> 

Это вычисляется в следующем JavaScript:

var MyClass; 

MyClass = (function() { 
    var methodFour; 

    function MyClass() {} 

    MyClass.methodOne = function() {}; 
    MyClass.methodTwo = function() {}; 
    MyClass.prototype.methodThree = function() {}; 
    methodFour = function() {}; 

    return MyClass; 

})(); 

Так, methodOne и methodTwo оба метода общественного класса, methodThree получает идти на прототипе, поэтому он является общедоступным методом экземпляра, а methodFour становится переменной внутри класса, которая может использоваться внутри, но никогда не открывается публично.

Надеюсь, что ответит на то, что вы просите?

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