Javascript 维护'的范围;这';在构造函数模块中

Javascript 维护'的范围;这';在构造函数模块中,javascript,module,scope,Javascript,Module,Scope,我试图学习模块设计模式,但在嵌套方法函数中的作用域方面遇到了问题。关于这个话题的其他问题似乎比我正在做的更高级。因此,在以下代码中: var myModule = function(){ var myObject = { myArray: [], //array of items addItem: function(arg){ var item = { type: "example",

我试图学习模块设计模式,但在嵌套方法函数中的作用域方面遇到了问题。关于这个话题的其他问题似乎比我正在做的更高级。因此,在以下代码中:

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”,而是将其添加到自身?不太清楚。谁能给我一个提示吗?提前谢谢

“this”的作用域是addItem()函数。你需要使用

myObject.myArray.push(item);
您将看到一种常见做法,函数将“this”设置为另一个变量,以便稍后在子函数/对象内部引用

var self = this;


“this”的作用域是addItem()函数。你需要使用

myObject.myArray.push(item);
您将看到一种常见做法,函数将“this”设置为另一个变量,以便稍后在子函数/对象内部引用

var self = this;


“this”的作用域是addItem()函数。你需要使用

myObject.myArray.push(item);
您将看到一种常见做法,函数将“this”设置为另一个变量,以便稍后在子函数/对象内部引用

var self = this;


“this”的作用域是addItem()函数。你需要使用

myObject.myArray.push(item);
您将看到一种常见做法,函数将“this”设置为另一个变量,以便稍后在子函数/对象内部引用

var self = this;


这将如您所期望的那样工作,项目将被推送到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;
}

尽管addItem函数中未定义“value”变量。

这将按预期工作,并且项将被推送到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;
}

尽管addItem函数中未定义“value”变量。

这将按预期工作,并且项将被推送到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;
}

尽管addItem函数中未定义“value”变量。

这将按预期工作,并且项将被推送到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'变量未在addItem函数中定义。

停止尝试欺骗死亡。只需使用原型

比如:

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'
});

停止欺骗死亡。只需使用原型

比如:

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'
});

停止欺骗死亡。只需使用原型

比如:

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'
});

停止欺骗死亡。只需使用原型

比如:

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'
});

哎呀,这只是一个例子。一个打字错误,真的。谢谢你抓住它。在我的示例代码中修复它…哦,这只是一个示例。一个打字错误,真的。谢谢你抓住它。在我的示例代码中修复它…哦,这只是一个示例。一个打字错误,真的。谢谢你抓住它。在我的示例代码中修复它…哦,这只是一个示例。一个打字错误,真的。谢谢你抓住它。在我的示例代码中修复了它……那么,在这种情况下,我应该在哪里分配“var self=this;”?它不是myObject的属性,但将它放在myModule中似乎超出了我需要的范围。这只是一个关于范围和将“this”设置为变量的示例。在您的示例中,它不起作用。因此,在这种情况下,我应该在哪里分配“var self=this;”?它不是myObject的属性,但将它放在myModule中似乎超出了我需要的范围。这只是一个关于范围和将“this”设置为变量的示例。在您的示例中,它不起作用。因此,在这种情况下,我应该在哪里分配“var self=this;”?它不是myObject的属性,但将它放在myModule中似乎超出了我需要的范围。这只是一个关于范围和将“this”设置为变量的示例。在您的示例中,它不起作用。因此,在这种情况下,我应该在哪里分配“var self=this;”?它不是myObject的属性,但将它放在myModule中似乎超出了我需要的范围。这只是一个关于范围和将“this”设置为变量的示例。这在你的例子中是行不通的。