阅读有关事件对象及其构造函数$.Event()
的jQuery文档,我看到了:
new
运算符是[在调用构造函数时]的可选项。
太酷了! jQuery人是如何做出这样的伎俩的呢?
答案 0 :(得分:7)
John Resig很好地解释了这一点:http://ejohn.org/apps/learn/#36和http://ejohn.org/apps/learn/#38
基本上,Event
是一个函数和一个对象(函数是对象)。事件的第一行检查它是作为函数调用还是作为Event对象的实例调用(使用new运算符)。
如果您正在寻找jQuery的具体方式,请查看jQuery source的第3134-3138行:
jQuery.Event = function( src, props ) {
// Allow instantiation without the 'new' keyword
if ( !this.preventDefault ) {
return new jQuery.Event( src, props );
}
对此的解释是the jQuery forms。
基本上,在3178-3194行,preventDefault事件被添加到Event原型中。如果使用new
实例化事件,则会给出此preventDefault方法。否则,它将不会被定义。
答案 1 :(得分:3)
任何用户定义的JavaScript函数都可以使用new
运算符调用。没有new
它就像普通函数一样工作(因为它就是这样)。使用new
,解释器创建一个适当的原型设置的新对象,并使该对象成为调用的this
参数。如果函数体new
显式为值,则此新鲜对象是return
运算符 - 除之外的结果;然后返回值管理。
所以,如果你写
function foo() {
return { bar: 42 };
}
你可以在没有或new
的情况下调用它 - 没有区别,因为正文总是显式返回一个值,并且从不使用它的this
。