一般會用 for-in 取得物件的屬性,但是物件有函數的話就會造成問題了

這時可以用hasOwnProperty()過濾原型屬性

// the object
var man = {
    hands: 2,
    legs: 2,
    heads: 1
};
// somewhere else in the code
// a method was added to all objects
if (typeof Object.prototype.clone === "undefined") {
    Object.prototype.clone = function () {};
}

for (var key in man) {
   if (man.hasOwnProperty(key)) { // 過濾
      console.log(key, ":", man[key]);
   }
}


/* 控制台顯示結果
hands : 2
legs : 2
heads : 1
*/


不用hasOwnProperty()過濾的話

for (var key in man) {
   console.log(key, ":", man[key]);
}


/*控制台顯示結果
hands : 2
legs : 2
heads : 1
clone: function()
*/


另外一種使用方法如下:

for (var key in man) {
    if (Object.prototype.hasOwnProperty.call(man, key)) { // filter
        console.log(key, ":", man[key]);
    }
}

這樣寫的好處是可以防止man重新定義了hasOwnProperty方法導致的衝突
如果不想寫這麼長的一串,你也可以這樣:


var key, hasOwn = Object.prototype.hasOwnProperty;
for (key in man) {
    if (hasOwn.call(man, key)) { // filter
        console.log(key, ":", man[key]);
    }
}

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 vivian 的頭像
    vivian

    VIVI。愛胡扯

    vivian 發表在 痞客邦 留言(0) 人氣()