簡體   English   中英

javascript屬性non enumerable仍然可以找到... in

[英]javascript property non enumerable still found by for… in

我正在寫一個小的javascript庫:我已經定義了一個Item對象,然后添加了一個帶有Item.prototype.addNumber的函數,最后我把它設置為不可枚舉,但是如果我嘗試使用for...in來記錄Item的方法循環功能仍然出現。 這是我的代碼,我做錯了嗎? (在Chrome 18和Firefox 11上測試過)

function Item() {
    ...
}

Item.prototype.addString= function() {
    ...
}

Object.defineProperty(Item, "addString", { enumerable: false });

您在Item而不是Item.prototype上定義屬性。

Object.defineProperty(Item.prototype, "addString", { enumerable: false });

如果您使用Object.defineProperty 最初addString添加到Item.prototype ,那么您可以顯式(或隱式)同時設置屬性描述符...

這將隱式設置enumerable:false ,以及writable configurablewritable false

Object.defineProperty(Item.prototype, "addString", { 
    value: function() {
        ...
    }
});

或者,如果你只想要enumerablefalse ,你可以這樣做......

Object.defineProperty(Item.prototype, "addString", { 
    value: function() {
        ...
    },
    configurable: true,
    writable: true
//  ,enumerable: false  // uncomment to be explicit, though not necessary
});

您正在Item的原型上直接在Object (非可枚舉的)和另一個addString (默認為可枚舉)上定義屬性( addString )。

for ( in )迭代原型鏈上的屬性,這就是它出現的原因。

暫無
暫無

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

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