第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么使用Object.prototype.hasOwnProperty.call

為什么使用Object.prototype.hasOwnProperty.call

智慧大石 2019-11-26 10:51:29
如果我理解正確,那么Javascript中的每個對象都是從Object原型繼承的,這意味著Javascript中的每個對象都可以通過其原型鏈訪問hasOwnProperty函數(shù)。在閱讀require.js的源代碼時,我偶然發(fā)現(xiàn)了該函數(shù):function hasProp(obj, prop) {    return hasOwn.call(obj, prop);}hasOwn是對的引用Object.prototype.hasOwnProperty。將此功能編寫為function hasProp(obj, prop) {    return obj.hasOwnProperty(prop);}既然如此,我們?yōu)槭裁匆耆x此功能?是否只是為了獲得(略微)提高性能而使用快捷方式和對屬性訪問進行本地緩存的問題,還是我缺少在沒有此方法的對象上使用hasOwnProperty的情況?
查看完整描述

3 回答

?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

[我的示例之間]有什么實際區(qū)別嗎?


用戶可能有一個用創(chuàng)建的JavaScript對象Object.create(null),該對象將具有一個null [[Prototype]]鏈,因此將不可hasOwnProperty()用。由于這個原因,使用第二種表格將無法正常工作。


這也是更安全的參考Object.prototype.hasOwnProperty()(也更短)。


你可以想象某人可能做了...


var someObject = {

    hasOwnProperty: function(lol) {

        return true;

    }

};

如果hasProp(someObject)像您的第二個示例那樣實現(xiàn)該方法,將會失?。ㄋ鼘⒅苯釉趯ο笊险业皆摲椒ú⒄{(diào)用該方法,而不是委托給Object.prototype.hasOwnProperty)。


但是,不太可能有人會重寫該Object.prototype.hasOwnProperty參考。


既然如此,我們?yōu)槭裁匆耆x此功能?


往上看。


這僅僅是快捷方式和屬性訪問本地緩存的問題,以(略有)提高性能...


從理論上講,它可能會更快,因為[[Prototype]]不必遵循該鏈條,但是我懷疑這可以忽略不計,而不是實現(xiàn)之所以如此。


...還是我錯過了hasOwnProperty可能在沒有此方法的對象上使用的任何情況 ?


hasOwnProperty()存在于Object.prototype,但可以被覆蓋。每個本機JavaScript對象(但不能保證宿主對象都可以遵循此規(guī)則,請參見RobG的深入說明)Object.prototype將其作為鏈上的最后一個對象null(當然,返回的對象除外Object.create(null))。


查看完整回答
反對 回復 2019-11-26
  • 3 回答
  • 0 關注
  • 5675 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號