定义要调用的函数中的`this`

时间:2014-10-04 21:00:43

标签: javascript

假设我有这个对象:

var someObject = {
    "collection" : ["aa", "bb", "cc"],
    "each" : function(func){
        for(var i = 0; i < this.collection.length; i++){
            func();
        }
    }
};

现在,当我使用此代码运行each函数时:

someObject.each(function() { console.log(this); });

我希望它打印来自collection的值(显然这只是示例应该做的描述;我想用这个来做更复杂的事情)。但是我该怎么做呢?如何定义this在我正在调用的函数范围内的内容?

是的我正试图在我自己的对象中模仿jquery each方法的行为。

2 个答案:

答案 0 :(得分:4)

您需要使用func上的apply(或call)功能才能在执行中定义this

var someObject = {
    "collection" : ["aa", "bb", "cc"],
    "each" : function(func){
        for(var i = 0; i < this.collection.length; i++){
            func.apply(this.collection[i], [this.collection[i], i]);
        }
    }
};

除了定义this之外,我还将元素及其索引作为func函数的参数添加为传递参数的示例。

答案 1 :(得分:3)

你会写func.callcall(或apply)方法指定this的值应该是什么。

示例:

var someObject = {
    "collection" : ["aa", "bb", "cc"],
    "each" : function(func){
        for(var i = 0; i < this.collection.length; i++){
            func.call(this.collection[i], /* Arguments */ i); // Pass in the index
        }
    }
};

P.S。您可以使用本机forEach方法,该方法自动随每个数组一起提供:

someObject.collection.forEach(function(item, index) {
  console.log(item, index);
});