我正在尝试在我的脚本中使用一系列函数。我使用命名空间对象,当我使用这个数组时,我的所有函数都undefined
。
如何使用良好的函数引用创建此数组来处理此processAllFunction
?
查看我的代码:
var myns = myns || {};
myns.test = myns.test || {};
myns.test.util = {
myOne: function(m) {
return m;
},
myTwo: function(m) {
return m;
},
processAllFunction: function(m) {
for(var i=0; i<this.replaceFilters.length; i++) {
if(typeof(this.replaceFilters[i])==='function') {
m= this.replaceFilters[i](m);
}
}
console.log(this.replaceFilters); // undefined functions
return m;
},
replaceFilters: [this.myOne, this.myTwo]
};
在你的代码中,this
要么指window
,要么指你定义myns
函数范围内的this
值,这就是你看到undefined
的原因。您需要的是对调用对象的引用。你应该能够用这样的东西来做到这一点:
var myns = myns || {};
myns.test = myns.test || {};
myns.test.util = {
myOne: function(m) {
return m;
},
myTwo: function(m) {
return m;
},
processAllFunction: function(m) {
for(var i = 0; i < this.getReplaceFilters().length; i++) {
if(typeof(this.getReplaceFilters()[i]) === 'function') {
m= this.replaceFilters[i](m);
}
}
return m;
},
getReplaceFilters: function() {
return [this.myOne, this.myTwo];
}
};
请注意,replaceFilters
不是简单地具有值 [this.myOne, this.myTwo]
,它现在是一个返回 [this.myOne, this.myTwo]
的函数。这是因为当您现在调用myns.test.util.getReplaceFilters
时,this
指向my.test.util
。当你打电话给myns.test.util.processAllFunction()
时,同样的事情也会发生在this
身上; this
再次设置为 myns.test.util
。当您在 processAllFunction
中调用 getReplaceFilters
时,也使用这个 this
值。
我找到了解决方案,在对象外部使用 replaceFilters(声明后)。
myns.test.util = {
myOne: function(m) {
return m;
},
myTwo: function(m) {
return m;
},
processAllFunction: function(m) {
for(var i=0; i<this.replaceFilters.length; i++) {
if(typeof(this.replaceFilters[i])==='function') {
m= this.replaceFilters[i](m);
}
}
console.log(this.replaceFilters);
return m;
}
};
myns.test.util.replaceFilters = [this.myOne, this.myTwo];
使用这种方法,我对this
没有问题.