我试图通过下面的示例理解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/

10-11 12:58