在构造函数模块中维护'this'的范围

时间:2014-04-23 18:00:23

标签: javascript module scope

我试图学习模块设计模式,并且我在嵌套方法函数中遇到了范围问题。关于该主题的其他问题似乎比我正在做的更先进。因此,在以下代码中:

var myModule = function(){
  var myObject = {
    myArray: [],    //array of items
    addItem: function(arg){
            var item = {
                type: "example",
                value: arg
                }
            this.myArray.push(item);
        }
    }
  return myObject;
}

方法" addItem"似乎没有将对象添加到" myObject.myArray",而是将其添加到自身?不太确定。任何人都可以给我一个提示吗?提前谢谢!

3 个答案:

答案 0 :(得分:1)

'这'范围限定为addItem()函数。您需要使用

myObject.myArray.push(item);

您会看到一种常见的做法,其中功能将设置'这个'稍后在子函数/对象内部引用的另一个变量。

var self = this;

var $this = this;

答案 1 :(得分:1)

这将按预期工作,并将项目推送到myObject的数组。

var myModule = function(){
var myObject = {
    myArray: [],    //array of items
    addItem: function(arg){
            var item = {
                type: value,
                value: arg
                }
            myObject.myArray.push(item);
        }
    }
    return myObject;
}

虽然你的'value'var没有在addItem函数中定义。

答案 2 :(得分:1)

不要试图欺骗死亡。只需使用原型。

类似的东西:

var MyModule = function() {

    this.myArray = [];
};
MyModule.prototype.addItem = function(arg) {
    var item = {
        type : "example",
        value : arg
    };
    this.myArray.push(item);
};

你会这样称呼:

var myModule = new MyModule()

myModule.addItem({
    better : 'way'
});