簡體   English   中英

JavaScript:如何在 Object.defineProperty 中添加不可枚舉的方法(不是屬性)

[英]JavaScript: How to add a not enumerable method (not a property) in Object.defineProperty

我想向 Array.prototype 添加一個方法(不是屬性),但我不希望它是可枚舉的,並且不希望在第三方庫中將所有 for(...in...) 弄亂。

//... Example:
//... Only push the value if it is not false
Array.prototype.pushValue = function(value){
    if(value){ this.push(value); }
}

var pieces = [];
pieces.pushValue(0);
pieces.pushValue(1);
pieces.pushValue(2);
pieces.pushValue(null);
console.log(pieces.join(",")); //outputs 1,2

for(var k in pieces){
    console.log(k); //outputs 0,1 and pushValue
}

我知道我可以在我的代碼上使用“hasOwnProperty”來檢測我的自定義方法,但我無法更改第三方庫中的所有代碼來添加此驗證。

不管向 Array.prototype 添加方法是否是一種好習慣,是否可以將其添加為不可枚舉?

您可以像這樣使用Object.defineProperty()

 Object.defineProperty(Array.prototype, 'test', { value: () => console.log(1), enumerable: false, });

此方法允許精確添加或修改對象的屬性。 通過賦值添加的普通屬性會創建在屬性枚舉期間顯示的屬性(for...in 循環或 Object.keys 方法),其值可能會更改,也可能會被刪除。 此方法允許從默認值更改這些額外的詳細信息。 默認情況下,使用 Object.defineProperty() 添加的值是不可變且不可枚舉的。

暫無
暫無

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

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