我试图通过下面的示例理解OOP。您能解释我做错了什么吗,为什么吗?
var shoppingcartModel = function() {
var _Cart = function() {
return {
totalPrice: {},
products: []
};
}
return {
cart: _Cart,
addProducts: function(product) {
return _Cart().products.push(product);
}
};
};
var shoppingCart = shoppingcartModel()
console.log(shoppingCart.cart())
shoppingCart.addProducts('product1')
shoppingCart.addProducts('product2')
console.log(shoppingCart.cart())
最佳答案
_Cart
是一个返回对象而不是对象本身的函数。每当调用Cart_()
时(包括在addProducts
中),您都会创建一个新对象,因此无论您向哪个旧对象进行推送,都将被忽略,因为不会保留对旧对象的引用。
尝试这样的事情:
var shoppingcartModel = function() {
const cart = {
totalPrice: {},
products: []
};
return {
cart,
addProducts: function(product) {
return cart.products.push(product);
}
};
};
var shoppingCart = shoppingcartModel()
console.log(shoppingCart.cart)
shoppingCart.addProducts('product1')
shoppingCart.addProducts('product2')
console.log(shoppingCart.cart)
关于javascript - 无法将值更新为构造函数生成的模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50614939/