将对象传递给函数方法

时间:2017-04-04 10:36:52

标签: jquery iife

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

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向购物车添加商品,但没有商品添加到购物车。如何从addToCart调用项目对象时将其传递到MyOtherFunction方法?

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

1 个答案:

答案 0 :(得分:0)

问题在于:

 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
    }

})();