我用一堆本地实例化的javascript对象填充数组。对象是通过构造函数创建的。有没有办法在不扩展构造函数的情况下向对象添加其他属性以包含所有可能的输入属性?
var item = function(name, id) {
this.name = name;
this.id = id;
this.sharedMethod = function() {
// do stuff
}
}
var someArray = [
new item("one", 1) {house: "blue", car: "new"},
new item("two", 2) {pet: "dog"},
new item("three", 3),
new item("four", 4) {potatoChips: "yes", random: "sure is"}
];
我知道上面someArray示例中的大括号是非法的。虽然,我不确定采用这种方法的正确方法。是否有一些特殊的语法来实现这一点,它保留了构造函数的使用(对于共享函数),但不涉及必须将每个项目存储在var中,然后手动将它们推送到数组中。我还想避免扩展构造函数以包含众多各种属性。
我已经尝试过搜索一段时间,但似乎无法找到合适的搜索字词来找到答案。
答案 0 :(得分:2)
您可以只使用一个存储对象的变量:
var item = function(name, props) {
this.name = name;
this.props = props;
this.sharedMethod = function() {
// do stuff
}
}
然后简单地传递一个具有多个属性的对象:
new item("one", {"house": "blue", "car": "new"});
您也可以直接将它们设置为属性,而不是使用props.[property]
访问它们。通过循环遍历对象并将它们设置为如下属性:
var item = function(name, props) {
this.name = name;
for(prop in props)
this[prop] = prop;
this.sharedMethod = function() {
// do stuff
}
}