繁体   English   中英

如何在Javascript名称空间脚本中创建函数数组

[英]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.getReplaceFiltersthis指向my.test.util 同样的事情发生在this当你调用myns.test.util.processAllFunction() ; this再次设置为myns.test.util 这是该值this当你调用也可以用来getReplaceFiltersprocessAllFunction

我找到了解决方案,在对象外部(声明后)使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM