所以我正在阅读Javascript:The Definitive Guide并正在审核这个简单的功能:
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页上打印出来。
我怀疑它是,但我只是想确定这个函数没有什么奇怪的东西,我只是不知道它会使它工作。
答案 0 :(得分:2)
这是否意味着这只是书中的一个错误?
是。这真的很令人惊讶。
o.hasOwnProperty[prop]
是有效的代码,而不是Flanagan在那里使用的意思。 (它在prop
函数对象上查找名为hasOwnProperty
变量的属性。)
请告诉我他也在某处宣布prop
。它没有在您引用的代码中声明,从而使代码似乎成为The Horror of Implicit Globals的牺牲品。