我正在尝试使用新对象填充数组,但我唯一得到的是 - 未捕获的TypeError:产品不是构造函数
这是我的obj代码。构造:
function product(id, preview, colors, sizes, title, price) {
this.id = id;
this.preview = preview;
this.colors = colors;
this.sizes = sizes;
this.title = title;
this.price = price;
};
和循环代码:
var products = [];
for( i=0; i<db.length; i++) {
var xyz = db[i];
products[i] = new product( xyz.id, xyz.preview, xyz.colors, xyz.sizes, xyz.title, xyz.price );
};
这里是“minfied”代码块示例: https://jsfiddle.net/cujrfhyL/1/
- 提前谢谢。
答案 0 :(得分:2)
如果products数组变量已经有某种数据,那么使用数组推送最好不要覆盖它包含的数据
var product1 = { id: 6566, price: 3 };
var product2 = { id: 6566, price: 3 };
var product3 = { id: 6568, price: 3 };
var db = [ product1, product2 ];
function product(id, price) {
this.id = id;
this.price = price;
};
var products = [new product(product3.id,product3.price)];
function addProducts() {
for( i=0; i<db.length; i++) {
var xyz = db[i];
products.push(new product( xyz.id, xyz.price ));
}
console.log(products)
};
addProducts();
&#13;
答案 1 :(得分:1)
您需要使用new
运算符。
products[i] = new product( xyz.id, xyz.price );
var product1 = { id: 6566, price: 3 };
var product2 = { id: 6566, price: 3 };
var db = [ product1, product2 ];
function product(id, price) {
this.id = id;
this.price = price;
};
var products = [];
function addProducts() {
for( i=0; i<db.length; i++) {
var xyz = db[i];
products[i] = new product( xyz.id, xyz.price );
alert(products[i]);
}
};
addProducts();
&#13;
答案 2 :(得分:0)
不知道您是否在本地遇到同样的问题,但在您的fiddle错误输入中:
写在那里:
var product1 = { id: 6566, price: 3 };
var product2 = { id: 6566, price: 3 };
var db = [ product6566, product6646 ];
但是你需要在db:
中引用product1和product2var db = [ product1, product2 ];
从那里开始,您需要使用“新”关键字:
您的代码:
products[i] = product( xyz.id, xyz.price );
正确的代码:
products[i] = new product( xyz.id, xyz.price );
在Updated working fiddle中,您可以看到它完美运行