2011-09-05 43 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