是否可以创建一个可以像数组和对象一样使用的对象?
我到目前为止最接近的是允许你使用数组键或对象属性分配值:
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";
答案 0 :(得分:0)
我相信您会发现Javascript中的正常Arrays
继承自Object
,这意味着您可以像普通对象一样滥用它们。
let MyArray = [1, 2, 3];
console.log('let MyArray = [1, 2, 3];');
console.log('Typeof MyArray = ', typeof(MyArray));
console.log('Wait.....');
console.log('So can I just assign stuff to an array like an object?');
MyArray['key'] = 'value';
console.log(`MyArray.key = 'value';`);
console.log('console.log(MyArray.key) =>', JSON.stringify(MyArray.key));
console.log('Keys:', JSON.stringify(Object.keys(MyArray)));
console.log('Array Length:', MyArray.length);
console.log('TADA, the standard browser Array does what you want');
除了令人困惑之外,可能有理由不这样做,但我相信它会满足您的要求,并且不需要代码!
编辑:在阅读了下面的一些评论后,由于某种原因,OP似乎想要以Object
模式添加属性作为数组成员。如果您需要,可以使用Object.keys(MyArray)
代替MyArray
,如上面控制台输出的最后几行所示。