3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
[我的示例之間]有什么實(shí)際區(qū)別嗎?
用戶可能有一個(gè)用創(chuàng)建的JavaScript對(duì)象Object.create(null),該對(duì)象將具有一個(gè)null [[Prototype]]鏈,因此將不可hasOwnProperty()用。由于這個(gè)原因,使用第二種表格將無(wú)法正常工作。
這也是更安全的參考Object.prototype.hasOwnProperty()(也更短)。
你可以想象某人可能做了...
var someObject = {
hasOwnProperty: function(lol) {
return true;
}
};
如果hasProp(someObject)像您的第二個(gè)示例那樣實(shí)現(xiàn)該方法,將會(huì)失敗(它將直接在對(duì)象上找到該方法并調(diào)用該方法,而不是委托給Object.prototype.hasOwnProperty)。
但是,不太可能有人會(huì)重寫該Object.prototype.hasOwnProperty參考。
既然如此,我們?yōu)槭裁匆耆x此功能?
往上看。
這僅僅是快捷方式和屬性訪問(wèn)本地緩存的問(wèn)題,以(略有)提高性能...
從理論上講,它可能會(huì)更快,因?yàn)閇[Prototype]]不必遵循該鏈條,但是我懷疑這可以忽略不計(jì),而不是實(shí)現(xiàn)之所以如此。
...還是我錯(cuò)過(guò)了hasOwnProperty可能在沒有此方法的對(duì)象上使用的任何情況 ?
hasOwnProperty()存在于Object.prototype,但可以被覆蓋。每個(gè)本機(jī)JavaScript對(duì)象(但不能保證宿主對(duì)象都可以遵循此規(guī)則,請(qǐng)參見RobG的深入說(shuō)明)Object.prototype將其作為鏈上的最后一個(gè)對(duì)象null(當(dāng)然,返回的對(duì)象除外Object.create(null))。
添加回答
舉報(bào)