簡體   English   中英

for ... in循環中的繼承非枚舉屬性(JavaScript)

[英]Inherited non-enumerable properties in for…in loop (JavaScript)

我有一個對象p ,有一個可枚舉的x

var p = Object.create(Object.prototype, {
  x: {
    value: "frog",
    enumerable: true
  }
});

我創建了一個繼承自p的對象,並使用非可枚舉屬性覆蓋屬性x

var o = Object.create(p, {
  x: {
    value: "bird",
    enumerable: false
  }
});

您如何看待,屬性x是否會在o的for循環中枚舉?

for (var n in o) {
  console.log(n);
}

好吧,在Chrome和IE9中它將被枚舉(我認為,這是非常奇怪的); 在FF中,它不會被列舉。

哪一個是正確的行為?

這是一個完整的例子: http//jsfiddle.net/hnvsM/3/

根據這個 ,它肯定是chrome和ie9中的一個bug。 強調我的。

枚舉對象的屬性包括枚舉其原型的屬性,原型的原型,等等,遞歸; 但是如果原型的屬性被“遮蔽”,則不會枚舉原型的屬性,因為原型鏈中的某些先前對象具有相同名稱的屬性。 在確定原型對象的屬性是否被原型鏈上的先前對象遮蔽時,不考慮[[Enumerable]]屬性的值

這是V8中的已知錯誤。 很長一段時間以來一直有關於此的錯誤報告。

問題705:非可枚舉屬性無法從for-in隱藏繼承的可枚舉屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM