我正在寻找在javascript中存储对象引用的正确方法。
例如,我有一个对象客户:
function Customer(n) {
this.name = n;
}
所有客户的阵列都被填满了:
var customers = new Array()
customers.push(new Customer('Alfred'));
customers.push(new Customer('Bob'));
现在我还有其他几个引用客户的对象,例如purchase
和outstandingOffer
,promotion
等。应该都引用customers数组的元素。例如:
function Purchase(i, c) {
this.customer = c; // ? <- this need to be a reference
this.item = i;
}
这可以通过将索引存储在数组中来完成,但是如果需要删除客户,这似乎很脆弱。在javascript中存储对另一个对象的引用的最佳方法是什么?
答案 0 :(得分:1)
在下面看你的方法是不同的
var customers = new Array()
customers.push(new Customer('Alfred'));
customers.push(new Customer('Bob'));
您正在推送数组中的新对象而不保存对它的引用。因此,您的购买功能永远不会知道什么是谁或谁是
这是我如何接近它
function Customer(n) {
this.name = n;
this.items=[];
this.addPurchase=function(item){
this.items.push(item);
}
}
以上功能将具有以下
var customers = {}; //create a big object that stores all customers
customers.Alfred=new Customer('Alfred'); // create a new object named Alfred
customers.Bob=new Customer('Bob'); // create a new object named Bob
customers.John=new Customer('John'); // create a new object named John
使用console.log,您将获得
Alfred: Object, Bob: Object, John: Object
如果您想将项目添加到Alfred,请执行此操作
customers.Alfred.addPurchase('pineapple');
如果您想向Bob添加项目,请执行此操作
customers.Bob.addPurchase('mango');
如果您想向John添加项目,请执行此操作
customers.John.addPurchase('coconut');
这是console.log(customers.John.items);
Array [ "coconut" ]
那么如果我们想要删除客户呢? 我们已经有了它的参考!
delete customers.John;
John和这段历史消失了!......确认它已被删除
console.log(customers);
输出
Object { Alfred: Object, Bob: Object }
答案 1 :(得分:0)
使用new
创建对象
var customers = new Array()
customers.push(new Customer('Alfred'));
customers.push(new Customer('Bob'));
function Purchase(i, c) {
this.customer = c; // ? <- this need to be a reference
this.item = i;
}
var Purchase_obj = new Purchase(2,customers[0] );