假设我有这个对象:
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
方法的行为。
答案 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.call
。 call
(或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);
});