【问题标题】:Events with native vs. lambda functions [duplicate]具有本机与 lambda 函数的事件 [重复]
【发布时间】:2013-07-29 15:00:39
【问题描述】:

一个关于 javascript 事件的技术问题:

为什么

window.onmousewheel = console.log;

抛出一个Uncaught TypeError: Illegal invocation,同时

window.onmousewheel = function (e) {console.log(e); };

按预期工作并将事件打印为字符串? 为什么console.log,当分配给window.onmousewheel时,不是像lambda表达式那样只用一个参数调用?

西蒙

【问题讨论】:

标签: javascript javascript-events


【解决方案1】:

当函数在没有明确接收者的情况下被调用时,接收者是window(或更一般地是全局对象)或undefined,具体取决于严格性。 console.log 引用的函数要求其this 值是Console 的一个实例。

通常不会在用户代码中完成,但您可以保护您的方法不受 通用调用也是如此:

MyClass.prototype.method = function() {
    if( !( this instanceof MyClass ) ) {
        throw new Error("Invalid invocation");
    }
};

【讨论】:

  • 感谢您的解释,而不是一些解决方法!
【解决方案2】:

这一切都与console.log的范围有关

应该这样做:

window.onmousewheel = console.log.bind(console);

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多