我有以下两个立即调用的函数:
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
方法?
构建这些函数的最佳方法是什么,以便我可以从其他函数中调用它们?
答案 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
}
})();