是否可以向 javascript Array
添加属性,例如 length,它不会在 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
});
这将为 a
创建一个名为 dimension
的属性,它不会在 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
原型(prototype)中创建这个函数,让所有的数组对象默认继承它——
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
正常工作。
关于javascript - 将属性添加到类似于长度的javascript数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503727/