Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环中的JavaScript匿名函数错误_Javascript_Function_Object_Prototype - Fatal编程技术网

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

for循环中的JavaScript匿名函数错误,javascript,function,object,prototype,Javascript,Function,Object,Prototype,您好,我正在阅读第6版的“JavaScript:权威指南”,并在9.1类和原型中尝试了其中一个示例 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 <=

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

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 + ")"; 
    }
};

您知道如何修复此错误吗?

Log不能在console对象之外调用,您要传递的是函数,而不是上下文

r.foreach(function(a){
    console.log(a);
});

这可以正常工作。

发生这种情况是因为您将
log
方法从
console
对象中分离,而
console.log
希望上下文(
This
)是
console
,而不是当您丢失上下文时的
窗口
。如果您想使用
console.log
作为函数,您应该明确告诉它要使用什么上下文

r.foreach(console.log.bind(console));
在这种情况下他是你的朋友

对于未来的读者:ES6样式还允许您为此使用箭头函数,这将更加简洁:

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

我认为这是console.log中的一些东西,很好,它可以工作,但是为什么呢?事实上,它是通过对象控制台调用的,对吗?@DontVoteMeDown当你传递一个函数时,你传递的是函数,而不是父信息,在你的循环中调用函数,然后遇到一个问题,
这个
对象是窗口而不是控制台,函数会生成一个错误。@techfoobar很快就会有另一种经典的方法来执行它
r.foreach(x=>console.log(x))
:)Hmm。。我需要保持最新的规格。谢谢。:)谢谢你的解释,现在有道理了
r.foreach(x => console.log(x))