gpt4 book ai didi

for循环错误中的JavaScript匿名函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:55 25 4
gpt4 key购买 nike

您好,我正在阅读“JavaScript:权威指南”第 6 版,并尝试了 9.1 类和原型(prototype)中的示例之一。

function range (from, to) {
var r = Object.create(range.methods);

r.from = from;
r.to = to;
return r;
}

range.methods = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
foreach: function(f) {
for(var x = Math.ceil(this.from); x <= this.to; x++)
f(x);
},
toString: function() {
return "(" + this.from + "..." + this.to + ")";
}
};

将其加载到控制台会引发错误

Uncaught TypeError: Illegal invocation class.js:31. range.methods.foreach class.js:31 (anonymous function)

我想 foreach 方法的目的是传递一个函数名作为参数

var r = range(1, 3);
r.foreach(console.log);

有什么办法可以解决这个错误吗?

最佳答案

这是因为您从 console 对象中分离了 log 方法,而 console.log 需要上下文(this ) 成为 console,而不是 Window,因为当您失去上下文时它会变成这样。如果您想将 console.log 用作函数,您应该明确告诉它要使用的上下文。

r.foreach(console.log.bind(console));

Function.prototype.bind在这种情况下是你的 friend 。

对于 future 的读者:ES6 风格还允许您为此使用箭头函数,这会更加简洁:

r.foreach(x => console.log(x))

关于for循环错误中的JavaScript匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com