2014-09-29 71 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