阅读有关事件对象及其构造函数$.Event()的jQuery文档,我看到:
The
new
operator is optional [when calling the constructor].
这很酷! jQuery人是如何做出这样的伎俩的?
解决方法
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方法.否则,它将不会被定义.