0

我正在尝试在我的脚本中使用一组函数。我使用命名空间对象,当我使用这个数组时,我所有的函数都是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]
};
4

2 回答 2

1

在您的代码中,this要么是指,要么是您定义的函数范围内的window值,这就是您看到的原因。您需要的是对调用对象的引用。你应该能够用这样的东西来做到这一点:thismynsundefined

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.utilthis当你打电话时也会发生同样的事情myns.test.util.processAllFunction()this再次设置为myns.test.utilthis当你调用getReplaceFiltersinside时,也会使用这个值processAllFunction

于 2012-06-25T15:27:18.520 回答
0

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

于 2012-06-28T08:25:53.157 回答