是否可以创建 Array.forEach 的替代方案,自动将上下文“this”设置为与调用该方法时相同的上下文?
例如(不工作,不知道为什么):
Array.prototype.each = function(fn) {
return this.forEach(fn, arguments.callee.caller);
}
function myFunction() {
this.myVar = 'myVar';
[1,2,3].each(function() {
console.log(this.myVar); // logs 'myVar'
});
}
最佳答案
Array.forEach 已经将上下文参数作为可选的最后一个参数,
(function() {
this.myvar = "myvar";
[1,2,3,4].forEach(function(v) {
console.log("v:"+v);
console.log("myvar="+this.myvar);
}, this);
})();
参见 MDN forEach
此外,上面的示例(如果我们不处理与 this
相关的实例方法)无需使用 bind
或 forEach 的可选上下文参数
,以下内容也可以正常工作:
function myFunction() {
this.myVar = 'myVar';
[1,2,3].forEach(function() {
console.log(this.myVar); // logs 'myVar'
});
}
myFunction();
因为 javascript 在功能范围内,所以匿名函数可以使用 this
访问父函数的范围并且它正确记录。 this
只有在处理实例方法时作为上下文才会真正成为问题。
关于javascript - 修改 Array.forEach 以自动将上下文设置为调用方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051776/