我正在尝试用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的范围部分遇到了困难。我很高兴地欢迎对我班上其他人的任何重构/建议。谢谢大家。
答案 0 :(得分: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;
})();