我试图学习模块设计模式,并且我在嵌套方法函数中遇到了范围问题。关于该主题的其他问题似乎比我正在做的更先进。因此,在以下代码中:
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",而是将其添加到自身?不太确定。任何人都可以给我一个提示吗?提前谢谢!
答案 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'
});