[英]How to create an array of functions into Javascript namespace script
我正在尝试在脚本中使用一系列函数。 我使用命名空间对象,当我使用此数组时,我的所有函数都是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
。 同样的事情发生在this
当你调用myns.test.util.processAllFunction()
; this
再次设置为myns.test.util
。 这是该值this
当你调用也可以用来getReplaceFilters
内processAllFunction
。
我找到了解决方案,在对象外部(声明后)使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.