如何在javascript

时间:2016-01-01 22:57:16

标签: javascript reference

我正在寻找在javascript中存储对象引用的正确方法。

例如,我有一个对象客户:

function Customer(n) {
  this.name = n;
}

所有客户的阵列都被填满了:

var customers = new Array()
customers.push(new Customer('Alfred'));
customers.push(new Customer('Bob'));

现在我还有其他几个引用客户的对象,例如purchaseoutstandingOfferpromotion等。应该都引用customers数组的元素。例如:

function Purchase(i, c) {
  this.customer = c; // ? <- this need to be a reference
  this.item = i; 
}

这可以通过将索引存储在数组中来完成,但是如果需要删除客户,这似乎很脆弱。在javascript中存储对另一个对象的引用的最佳方法是什么?

2 个答案:

答案 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);
  }
}

以上功能将具有以下

  1. 客户名称
  2. 将项目添加到客户项目购物车的功能
  3. 项目购物车
  4. 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] );