Javascript 指向同一函数的变量

Javascript 指向同一函数的变量,javascript,Javascript,我创建了一个新变量,carBasket和foodBasket,并将它们设置为等于basketModule()函数。然而,当我希望这两个变量中的每一个都指向它们自己的函数时,它们指向同一个函数。我想知道我应该做些什么来实现这一点 var basketModule = (function() { var basket = []; return { addItem: function(values) { basket.push(values);

我创建了一个新变量,
carBasket
foodBasket
,并将它们设置为等于
basketModule()
函数。然而,当我希望这两个变量中的每一个都指向它们自己的函数时,它们指向同一个函数。我想知道我应该做些什么来实现这一点

var basketModule = (function() {
    var basket = [];
    return {
        addItem: function(values) {
            basket.push(values);
        },
        getItemCount: function() {
            return basket.length;
        }
    };
}());

carBasket = basketModule;
carBasket.addItem('Audi');

foodBasket = basketModule;
foodBasket.addItem('Ham');

foodBasket.getItemCount(); //outputs 2 instead of 1

您必须为每个对象调用一个函数,以便为每个对象生成不同的变量,例如:

var basketModule = function() {
  var basket = [];
  return {
    addItem: function(values) {
      basket.push(values);
    },
    getItemCount: function() {
      return basket.length;
    }
  };
};
var carBasket = basketModule(),
    foodBasket = basketModule();
carBasket.addItem('Audi');
foodBasket.addItem('Ham');
foodBasket.getItemCount(); // 1
但是,为了对所有实例重用方法,最好使用构造函数:

var BasketModule = function() {
  this.basket = [];
};
BasketModule.prototype.addItem = function(values) {
  this.basket.push(values);
};
BasketModule.prototype.getItemCount = function() {
  return this.basket.length;
};
var carBasket = new BasketModule(),
    foodBasket = new BasketModule();
carBasket.addItem('Audi');
foodBasket.addItem('Ham');
foodBasket.getItemCount(); // 1

你应该考虑尝试这种模式:< /P>
var BasketModule = function() {
    var basket = [];
    return {
        addItem: function(values) {
            basket.push(values);
        },
        getItemCount: function() {
            return basket.length;
        }
    };
};

carBasket = new BasketModule();
carBasket.addItem('Audi');

foodBasket = new BasketModule();
foodBasket.addItem('Ham');
jsfiddle:


这将为每个
篮子创建单独的对象

分配对象引用不会导致复制对象。谢谢。您是否使用
原型
来节省内存?@Jon是的,这样我只在原型中定义一次方法,所有实例都使用这些方法。在第一段代码中,每个篮子都有自己的方法副本。但是我想知道,用构造函数和属性而不是函数来创建对象不是更好的做法吗?@el3ati2第一个代码(函数)是最接近OP的工作代码。第二个代码(构造函数)是我建议的方法。在我写评论时,您更新了答案:)