2014-09-29 65 views
3

所以我正在讀通過JavaScript:權威指南,並正檢討這個簡單的功能:括號表示與Object.hasOwnProperty?

function merge(o, p){ 
    for(prop in p){ 
     if(o.hasOwnProperty[prop]) continue; 
     o[prop] = p[prop]; 
    } 
    return o; 
} 

似乎很簡單,但是當我運行它,它不工作,除非我改變o.hasOwnProperty[prop]o.hasOwnProperty(prop)

這對我有意義,因爲hasOwnProperty是一種方法。這是否意味着這只是書中的一個錯誤?我正在閱讀第6版,這是打印在第127頁爲有興趣的人。

我懷疑是這樣,但我只是想確定沒有什麼奇怪的關於這個功能,我只是沒有意識到這會使它工作。

回答

2

這是否意味着這只是書中的一個錯誤?

是的。這真是令人驚訝。

o.hasOwnProperty[prop]是有效的代碼,而不是Flanagan在那裏的意思。 (它在hasOwnProperty函數對象中尋找名稱來自prop變量名稱的屬性。)

請告訴我他在某處也聲明瞭prop。它沒有在您的引用代碼中聲明,因此使代碼似乎陷入The Horror of Implicit Globals

+1

謝謝。我剛剛找到了這本書的Eratta,並且我看到其他人已經報道過這個(儘管目前尚未證實):http://www.oreilly.com/catalog/errataunconfirmed.csp?isbn=9780596101992。 – Aweary 2014-09-29 17:39:24

+0

'for(prop in p)' – Plato 2014-09-29 17:40:29

+2

@Plato:對。它沒有宣佈。 (在'merge'的某處應該有'var prop'。) – 2014-09-29 17:42:07