使用循环内的新对象填充数组

时间:2017-02-22 15:10:51

标签: javascript

我正在尝试使用新对象填充数组,但我唯一得到的是 - 未捕获的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/

- 提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果products数组变量已经有某种数据,那么使用数组推送最好不要覆盖它包含的数据

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

您需要使用new运算符。

products[i] = new product( xyz.id, xyz.price );

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

不知道您是否在本地遇到同样的问题,但在您的fiddle错误输入中:

写在那里:

var product1 = { id: 6566, price: 3 };
var product2 = { id: 6566, price: 3 };  
var db = [ product6566, product6646 ];

但是你需要在db:

中引用product1和product2
var db = [ product1, product2 ];

从那里开始,您需要使用“新”关键字:

您的代码:

products[i] = product( xyz.id, xyz.price );

正确的代码:

products[i] = new product( xyz.id, xyz.price );

Updated working fiddle中,您可以看到它完美运行