【发布时间】:2017-10-15 02:20:03
【问题描述】:
是否可以创建一个可以像数组和对象一样使用的对象?
到目前为止我得到的最接近的是下面,它只允许您使用数组键或对象属性分配一个值:
var ALO = {
db: {}
};
Object.defineProperty(ALO, 'length', {
get: function() {
var count = 0;
for (var prop in ALO.db) {
if (ALO.db.hasOwnProperty(prop)) count++;
}
return count;
},
enumerable: false
});
function add(baseObj, obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (!isNaN(prop)) {
//create a default string begining with i
baseObj.db["i" + prop] = obj[prop];
} else {
baseObj.db[prop] = obj[prop];
}
Object.defineProperty(baseObj, prop, {
get: function() {
return baseObj.db[prop];
},
set: function(newValue) {
baseObj.db[prop] = newValue;
},
enumerable: false,
configurable: true
});
Object.defineProperty(baseObj, baseObj.length - 1, {
get: function() {
return baseObj.db[prop];
},
set: function(newValue) {
baseObj.db[prop] = newValue;
},
enumerable: false,
configurable: true
});
}
}
}
add(ALO, {
"myprop": "myvalue"
});
document.write(ALO["myprop"] + "<br>");
ALO[0] = "mynewvalue";
document.write(ALO["myprop"] + "<br>");
ALO["myprop"] = "mynewervalue";
document.write(ALO["myprop"]);
我希望能够在分配不存在的项目时自动创建所需的内容,例如
ALO[1] = "create and assign this string";
或
ALO["somenonexistingprop"] = "another string";
【问题讨论】:
-
你想得到什么行为不同于普通的 JS 对象,即
var a = {}? -
@Barmar 感谢您的链接,但我所追求的是一种使用这个类数组对象的方法,就像一个数组一样,也完全像一个对象。我想要所有可用于数组的方法,并且我想以与本机相同的方式使用它们。
-
所以你想让
a.prop = "foo"像push一样工作吗?你为什么想这么做?用例是什么?
标签: javascript arrays javascript-objects defineproperty