我正在尝试用js制作一个简单的购物车(仅用于展示)。我创建了一个将对象存储在购物车中的功能,每个按钮都会将args传递给“添加到购物车”功能,该功能使CartItem
对象具有参数和存储,而不是cart
数组。它第一次运行得很好,但我得到了以下行Uncaught type error: String is not a function
:var a = new CartItem(title, price);
以下是相关的js:
var cart = [];
function CartItem(title, price) {
this.title = title;
this.price = price;
this.getTitle = function() {
return this.title;
};
this.getPrice = function() {
return this.price;
};
}
function addToCart(title, price) {
var a = new CartItem(title, price);
cart.push(a);
/* update cart display */
for (CartItem in cart) {
var itemDiv = document.createElement("div");
itemDiv.className = "cartItem";
itemDiv.innerHTML = title + " - $" + price;
document.getElementById("cartDisplay").appendChild(itemDiv);
}
}
和html:
<div class="cartDisplay" id="cartDisplay">
<p>All photographs are printed on 11"x17" Fujitsu Archival Quality stock.</p>
<h3>Your Cart</h3>
</div>
<div class="storeGrid">
<div class="storeItem">
<img src="res/Photos/O_IMG_0002.jpg" class="storeImg"/>
<div class="storeItemDesc">
<p>Price: $300</p>
<p>Description goes here.</p>
<a href="javascript:addToCart('Street with Steeple', 300, 1);" class="addToCart"><div class="addToCartDiv" id="1">Add to cart
<i class="fa fa-shopping-cart"></i></div></a>
</div>
</div>
</div>
答案 0 :(得分:1)
$(function() {
var hola_inject = $('html').attr('hola_ext_inject');
if (typeof hola_inject !== typeof undefined && hola_inject !== false) {
console.log('plugin exist');
}
});
一行对我来说很有趣。我的猜测是JS期望一个变量名称,你有CartItem,所以它在全局范围内。然后,当它试图评估for(CartItem in cart) {
时,CartItem是一个全局变量,而不是构造函数。
无论如何,你不应该使用var a = new CartItem(title, price);
来循环数组。你可以在python或java中做到这一点,但在javascript中它用于枚举对象的属性。改为使用标准循环。
MDN对for..in:
的描述for..in语句以任意顺序迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。