将对象传递给函数方法

Pass Object to Function Method

我有以下两个立即调用的函数:

var myCart = function() {
 var cart = [];

 var addToCart = function (item) {
   cart.push(item);
 }

 $(document).on('click', '.add-to-cart', function (e) {
   e.preventDefault();

   var item = $(this);
   addToCart ({
     ProductId: item.attr("data-id"),
     Name: item.attr("data-name"),
     Price: item.attr("data-price"),
     Quantity: 1
   });
 });

 return {
  addToCart: addToCart()
 }
}();

var MyOtherFunction = function (myCart) {
  $('.my-other-selector').click(function (e) {
    e.preventDefault();
    var item = $(this);
    myCart.addToCart ({
      ProductId: item.attr("data-id"),
      Name: item.attr("data-name"),
      Price: item.attr("data-price"),
      Quantity: 1
    });  
  });
}(MyCart);

我想将 MyOtherFunction 的商品添加到购物车,但没有商品添加到购物车。从 MyOtherFunction 调用时如何将项目对象传递给 addToCart 方法?

构建这些函数以便我可以从其他函数内部调用它们的最佳方式是什么?

问题出在这里:

 return {
    addToCart: addToCart()
 }

将上面的内容替换为以下内容:

return {
   addToCart : addToCart
}

将函数分配给变量时不需要 ()。您还需要将函数包装在 () 中,例如 var myCart = (function() {})(); 所以您的代码如下:

 var myCart = (function() {

    var cart = [];

    var addToCart = function (item) {
       cart.push(item);
    }

    $(document).on('click', '.add-to-cart', function (e) {
        e.preventDefault();

        var item = $(this);
        addToCart ({
           ProductId: item.attr("data-id"),
           Name: item.attr("data-name"),
           Price: item.attr("data-price"),
           Quantity: 1
       });
    });

    return {
       addToCart: addToCart
    }

})();