2015-04-30 2 views
-1
app.factory('Shop', function() { 
    var price = 0; 
    var cart = new Array(); 
    return { 
     totalPrice: function() { return price; }, 
     setTotalPrice: function(newPrice) { price = newPrice; }, 
     addToPrice: function(addedPrice) { price += addedPrice; }, 
     getCart: function() { return cart; }, 
     setCart: function(c) { cart = c; for (product in cart) { if (product.price) { addToPrice(product.price); } } }, 
     addToCart: function(product) { console.log(typeof(cart)); cart.push(product); addToPrice(product.price); }, 
     emptyCart: function() { cart = []; } 
    }; 
}); 

это на самом деле является angularJS, однако я инициализацией cart = new Array(); и когда я console.log(typeof(cart)); он записывает объект. а также cart.push с ошибкой, потому что это объект типа.Javascript новый Array() возвращает тип объекта

Любая идея, как я могу получить на самом деле массив?

+0

'var cart = [];' Добро пожаловать. –

+0

@BrianDriscoll 'typeof [] == object' – Jonathan

+0

' typeof' все в javascript является 'объектом'. То, что вы действительно хотите проверить, это 'instanceof' –

ответ

2

cart.push fails with an error because it is of type object.

Это неправда. В JavaScript typeof [] === typeof new Array() === 'object'

typeof operator MDN

Ваш код должен потерпеть неудачу по какой-то другой причине.

Edit:

Error: undefined is not a function (evaluating 'cart.push(product)') is the exact error.

Это, вероятно, означает, что вы не перезаписаны переменную cart somehwere, и это больше не является массивом.

setCart: function(c) { cart = c; ...

Может ли это быть виновником?

+0

скорее всего -_- спасибо! – xCoder

+0

@ xCoder Могу ли я посоветовать вам прочитать это: [Chrome: отладка JavaScript] (https://developer.chrome.com/devtools/docs/javascript-debugging). Chrome Devtools облегчают вашу жизнь. – Jonathan