无法在嵌套函数中引用类对象

时间:2013-08-16 20:48:24

标签: javascript coffeescript

我正在尝试用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 个答案:

答案 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;

})();