摘要:方法是中唯一一個處理對象屬性而不會往上遍歷原型鏈的。在這里,只有能給出正確答案,這在遍歷一個對象的屬性時是非常必要的。這里還要提醒下,當我們使用來遍歷對象時,使用將會很好地避免來自原型對象擴展所帶來的困擾。
判斷一個屬性是定義在對象本身而不是繼承自原型鏈,我們需要使用從 Object.prototype 繼承而來的 hasOwnProperty 方法。
hasOwnProperty 方法是 Javascript 中唯一一個處理對象屬性而不會往上遍歷原型鏈的。
// Poisoning Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 "bar" in foo; // true foo.hasOwnProperty("bar"); // false foo.hasOwnProperty("goo"); // true
在這里,只有 hasOwnProperty 能給出正確答案,這在遍歷一個對象的屬性時是非常必要的。Javascript 中沒有其他方法能判斷一個屬性是定義在對象本身還是繼承自原型鏈。
hasOwnProperty 作為屬性Javascript 并未將 hasOwnProperty 設為敏感詞,這意味著你可以擁有一個命名為 hasOwnProperty 的屬性。這個時候你無法再使用本身的 hasOwnProperty 方法來判斷屬性,所以你需要使用外部的 hasOwnProperty 方法來進行判斷。
var foo = { hasOwnProperty: function() { return false; }, bar: "Here be dragons" }; foo.hasOwnProperty("bar"); // always returns false // Use another Object"s hasOwnProperty and call it with "this" set to foo ({}).hasOwnProperty.call(foo, "bar"); // true // It"s also possible to use hasOwnProperty from the Object // prototype for this purpose Object.prototype.hasOwnProperty.call(foo, "bar"); // true總結
當判斷對象屬性存在時,hasOwnProperty 是唯一可以依賴的方法。這里還要提醒下,當我們使用 for in loop 來遍歷對象時,使用 hasOwnProperty 將會很好地避免來自原型對象擴展所帶來的困擾。
參考http://bonsaiden.github.io/JavaScript-Garden/#object.hasownproperty
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78051.html
摘要:第二是,由于會遍歷整個原型鏈,所以當原型鏈過長時,會對性能造成影響??偨Y建議養成過濾屬性的好習慣,不要對運行環境做任何假設,也無論原生的原型對象是否被擴展。 如同 in 運算符一樣,使用 for in 循環遍歷對象屬性時,也將往上遍歷整個原型鏈。 // Poisoning Object.prototype Object.prototype.bar = 1; var foo = {m...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:中的一切都可以視為對象,除了兩個特例和。上例中的第三個情形已說明刪除對象的屬性刪除屬性的唯一方法是使用,將屬性值設置為或只是移除了與屬性相關的值,并沒有真正刪除屬性本身。命名對象的屬性對象的屬性可以用普通字符或字符串來命名。 Javascript 中的一切都可以視為對象,除了兩個特例:null 和 undefined。 false.toString(); // false [1, 2...
閱讀 2326·2021-11-17 09:33
閱讀 852·2021-10-13 09:40
閱讀 582·2019-08-30 15:54
閱讀 788·2019-08-29 15:38
閱讀 2423·2019-08-28 18:15
閱讀 2481·2019-08-26 13:38
閱讀 1848·2019-08-26 13:36
閱讀 2137·2019-08-26 11:36