Javascript Can';t将值更新到构造函数生成的模型中

Javascript Can';t将值更新到构造函数生成的模型中,javascript,Javascript,我试图通过下面的例子来理解OOP。你能解释一下我做错了什么以及为什么吗 var shoppingcartModel=function(){ var_Cart=函数(){ 返回{ 总价:{}, 产品:[] }; } 返回{ 购物车:_cart, addProducts:功能(产品){ 返回_Cart().products.push(产品); } }; }; var shoppingCart=shoppingcartModel() console.log(shoppingCart.cart())

我试图通过下面的例子来理解OOP。你能解释一下我做错了什么以及为什么吗

var shoppingcartModel=function(){
var_Cart=函数(){
返回{
总价:{},
产品:[]
};
}
返回{
购物车:_cart,
addProducts:功能(产品){
返回_Cart().products.push(产品);
}
};
};
var shoppingCart=shoppingcartModel()
console.log(shoppingCart.cart())
shoppingCart.addProducts('product1')
shoppingCart.addProducts('product2')

console.log(shoppingCart.cart())
\u cart
是一个返回对象而不是对象本身的函数。无论何时调用
购物车()
,包括在
addProducts
中,您都会创建一个新对象,因此推送到其中一个旧对象的任何内容都将被忽略,因为没有对旧对象的引用保留

请尝试以下方法:

var shoppingcartModel=function(){
常数车={
总价:{},
产品:[]
};
返回{
运货马车
addProducts:功能(产品){
退货车.产品.推送(产品);
}
};
};
var shoppingCart=shoppingcartModel()
console.log(shoppingCart.cart)
shoppingCart.addProducts('product1')
shoppingCart.addProducts('product2')

console.log(shoppingCart.cart)
cart
将始终返回一个全新的对象,该对象具有抢占的
totalPrice
products
感谢您的回答它实际上涵盖了主要逻辑,但我确实有一个案例,测试要求cart是一个函数,也许您可以澄清它在这种情况下应该如何工作?这是一个相当愚蠢/任意的情况-尽可能忽略它,尽管我认为您可以将它转换为
shoppingcartModel
范围内对象的getter函数。