无法在关闭时运行函数

时间:2014-11-27 18:00:37

标签: javascript methods closures

我刚刚开始关闭。拥有私有的私有变量和方法。我遇到的问题是在调用方法时,开发人员控制台告诉我" undefined不是函数"。

使用Javascript:

var shop = (function() {
    var items = [];
    return {
        Item: function(data) {
            this.id = data[0];
            this.item = data[1];
            this.description = data[2];
            this.price = data[3];
            this.count = data[4];
        },
        addItem: function(id, item, description, price) {
            items.push(this.Item(id, item, description, price));
        },
        print: function() {
            var itemCon = document.getElementById('items'),
                html = "";
            items.forEach(function(item) {
                html += '<div class="item">';
                for(prop in item) {
                    if(prop != "id") {
                        if(prop != "count") {
                            if(prop === "price") {
                                html += '<p><span class="title">' + prop + '</span>: £' + item[prop] + '</p>';
                            } else {
                                html += '<p><span class="title">' + prop + '</span>: ' + item[prop] + '</p>';
                            };
                        };
                    };
                };
                html += '<button class="addButton" data-id="' + item.id + '">Add to Basket</button>'
                html += '</div>';
            });
            itemCon.innerHTML += html;
        }
    };
});

function init() {
    shop.addItem("0", "coat", "Warm yes!", 24.99);
    shop.print;
};
window.onload = init;

1 个答案:

答案 0 :(得分:1)

你没有调用IIFE,所以它没有返回你想要的对象。

var shop = (function() {
    var items = [];
    return {

        // your code

    };

})(); // <-- Invoke it!

你拥有它的方式,你只是将匿名函数分配给shop变量,而函数对象没有addItem()方法。