未捕获类型错误:字符串仅在第二次函数调用后才是函数

时间:2015-05-04 18:28:21

标签: javascript

我正在尝试用js制作一个简单的购物车(仅用于展示)。我创建了一个将对象存储在购物车中的功能,每个按钮都会将args传递给“添加到购物车”功能,该功能使CartItem对象具有参数和存储,而不是cart数组。它第一次运行得很好,但我得到了以下行Uncaught type error: String is not a functionvar 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>

1 个答案:

答案 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语句以任意顺序迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。