2011-09-05 40 views
6

通过有关该事件的对象,它的构造$.Event()我看到jQuery的文档阅读:可选`new`操作

new操作[调用构造函数时]是可选的。

很酷! jQuery人员如何拉这样的伎俩?

回答

7

约翰·雷西格解释这种很好:http://ejohn.org/apps/learn/#36http://ejohn.org/apps/learn/#38

基本上,Event是一个功能和一个对象(功能对象)。 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

什么是'this.preventDefault'? – Randomblue

+0

查看我的帖子以获取更新。 –

3

任何用户定义的JavaScript函数都可以通过或与new运算符一起调用。没有new它就像一个普通的函数一样工作(因为它就是这样)。使用new时,解释器会创建一个新的对象,其原型已适当设置,并使该对象成为该调用的参数this。这个新的对象是new运算符的结果,除了,如果函数体return是明确的值;然后返回值管理。

所以,如果你写

function foo() { 
    return { bar: 42 }; 
} 

可以称之为或者没有或new - 有没有区别,因为身体总是明确地返回一个值,并且从未使用其this