2013-08-16 4 views
1

Я пытаюсь создать класс в coffeescript, и я почти там. Моя проблема заключается в том, что я хотел бы создать пару переменных для всей области действия класса, однако я не знаю, как добраться до них внутри вложенных функций. @ эквивалентно «this.», однако я хотел бы иметь возможность получить эти свойства конструктора из любого места внутри класса.Проблема, связанная с объектом класса внутри вложенной функции

Пример:

class CoffeeScriptClass 
    constructor: (@foo) -> 

    _sampleFunction: -> 
    $.each BigArray, (index, NestedArray) -> 
     $.each NestedArray, (index, widget) -> 

     ## I'd like @foo to reference the constructor value 

     widget = @foo 

     return 
     return 
    return 

ли это смысл? Я действительно стараюсь, чтобы мой OO Javascript был аккуратным и организованным, но мне сложно провести время с частью обзора coffeescript. Я с удовольствием приветствую любой рефакторинг/совет по остальной части моего класса. Спасибо всем.

+1

Пытались ли вы с функцией '=>' привязки? – elclanrs

ответ

3

Вы должны размаху внутренние функции:

class CoffeeScriptClass 
    constructor: (@foo) -> 

    _sampleFunction: -> 
    $.each BigArray, (index, NestedArray) => // keep parent scope 
     $.each NestedArray, (index, widget) => // keep parent scope 

     ## I'd like @foo to reference the constructor value 

     widget = @foo 

     return 
     return 
    return 

Вот скомпилированный JS, показывающий, почему это работает:

var CoffeeScriptClass; 

CoffeeScriptClass = (function() { 

    function CoffeeScriptClass(foo) { 
    this.foo = foo; 
    } 

    CoffeeScriptClass.prototype._sampleFunction = function() { 

    var _this = this; // reference to the class is maintained 

    $.each(BigArray, function(index, NestedArray) { 
     $.each(NestedArray, function(index, widget) { 
     widget = _this.foo; 
     }); 
    }); 
    }; 

    return CoffeeScriptClass; 

})(); 
+0

Woah, я только что прочитал про жирные стрелки на сайте Coffeescript. Это потрясающе. Это была моя проблема. – StingeyB

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