javascript - 无法在闭包中运行函数

标签 javascript methods closures

我刚刚开始考虑关闭。拥有私有(private)变量和私有(private)方法。我遇到的问题是调用方法时,开发人员控制台告诉我“未定义不是函数”。

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;

最佳答案

您没有调用 IIFE,因此它没有返回您想要的对象。

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

        // your code

    };

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

按照您的方式,您只是将匿名函数分配给 shop 变量,并且该函数对象没有 addItem() 方法。

关于javascript - 无法在闭包中运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27176616/

相关文章:

perl - 在 Perl 中,如何调用名称在字符串中的方法?

python - lambdas 有什么用?

javascript - 突触js lstm rnn算法的死简单例子

这段代码有什么问题

javascript - window.open(url, target) 不会激活 Firefox 中的选项卡

javascript - 从一个 polymer 组件调用一个函数到另一个

php - fatal error : Function name must be a string in.。 PHP错误

objective-c - 在方法中,指针或实际对象是否作为参数传递?

swift - 在 Swift 3 中,比较两个闭包的方法是什么?

scala - scala 中的闭包是如何实现的?