2017-04-04 51 views
0

我有以下兩個立即調用的函數:通行證對象函數法

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方法中?

什麼是構建這些函數的最佳方式,以便我可以從其他函數內部調用它們?

+2

有語法錯誤,請單擊事件片段無法正常關閉。其次,您每次使用var cart = []重置購物車;更正這兩個更改並檢查 – rahulsm

+0

您還聲明瞭一個沒有參數的函數var myCart = function()並用參數調用它 –

回答

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 
    } 

})();