3
JavaScript數組是否有可能添加屬性的JavaScript Array
像長度不得到For IN
循環遍歷,但對創造添加屬性類似於長度
每個實例不同的值下面的代碼:
a = new Array();
a.dimension = 2; //add a new property to array
在這裏如果for in
循環被用來迭代a
,維度也將被迭代,我不想要。
可以添加這樣的屬性嗎?
JavaScript數組是否有可能添加屬性的JavaScript Array
像長度不得到For IN
循環遍歷,但對創造添加屬性類似於長度
每個實例不同的值下面的代碼:
a = new Array();
a.dimension = 2; //add a new property to array
在這裏如果for in
循環被用來迭代a
,維度也將被迭代,我不想要。
可以添加這樣的屬性嗎?
是的,這是可能的。使用defineProperty -
Object.defineProperty(a, "dimension", {
enumerable: false,
configurable: true,
writable: true,
value: 2
});
這將創建一個名爲dimension
爲a
,不會在for..in循環中枚舉屬性。
您可以定義一個函數來創建這樣的屬性 -
function defineArrayProperties(object, property, value) {
Object.defineProperty(object, property, {
enumerable: false,
configurable: true,
writable: true,
value: value
});
}
,然後你可以這樣調用 -
var b = [];
defineArrayProperties(b, "dimension", 3);
,您還可以在Array
原型創建此功能,讓所有陣列對象默認繼承它 -
Array.prototype.defineProperty = function (property, value) {
Object.defineProperty(this, property, {
enumerable: false,
configurable: true,
writable: true,
value: value
});
};
var b = [];
b.defineProperty("dimension", 4);
alert(b.dimension); // will alert 4
A Live Fiddle在這裏展示了上述兩種方法。我創建了兩個數組對象,並使用for ... in枚舉了它們的所有屬性。請注意,dimension
不會顯示在任何for ... in中。
編輯
您的瀏覽器必須支持的ECMAScript 5爲了Object.defineProperty
正常工作。
失敗in for循環中,我仍然得到維迭代var arr = new Array(); \t \t Object.defineProperty(ARR, 「維」,{ 枚舉:假, 配置的:真, 可寫:真, 值:2 \t});對於(一個在ARR){console.log(一);}//打印尺寸 – Sandeep
我的壞...已添加_DIM原型某處在我的代碼導致這...固定,它工作正常..謝謝很多 – Sandeep