将参数传递给Module模式函数时获取未定义

时间:2015-02-08 05:50:20

标签: javascript object

$("#foo").on("click", function() {
    amountItems.speek('heey')
})

var amountItems = (function(el) {
    // var el = el;
    return {
        speek: function() {
            alert(el)
        }
    }
}())

这是我第一次尝试使用模块模式。基本上当foo得到点击时我想要调用amountItems函数中的speek方法并且我想传递字符串' heey'这个方法所以它应该警告“heey'当foo被点击时。最初我想传递类似于$("#foo")。text()的内容,但无论如何我得到了#undefined'。

你能告诉我如何在jQuery对象传入这种类型的函数时使用它吗?

2 个答案:

答案 0 :(得分:1)

您只有el的参数位置错误。这有效:

$("#foo").on("click", function() {
    amountItems.speek('heey')
})

var amountItems = (function() {
    return {
        speek: function(el) {
            alert(el);
        }
    }
}())

- 编辑 -

万一你想知道整个范围/私有变量是如何工作的:

$("#foo").on("click", function() {
    amountItems.load('heey');
    amountItems.speek();
})

var amountItems = (function() {
    var el = ""

    return {
        load: function(str) {
            el = str;
        },
        speek: function() {
            alert(el);
        }
    }
}())

答案 1 :(得分:0)

执行此操作时:

var amountItems = (function(el) {
    // var el = el;
    return {
        speek: function() {
            alert(el)
        }
    }
}())

执行包装函数并为内部对象指定amountItems 您在调用此参数时传递参数(el),因此el未定义。

amountItems是一个名为speek的方法的对象,

之外

执行此操作的正确方式是:

var amountItems = {
        speek: function(txt) {
            alert(txt);
        }
    };

$("#foo").on("click", function() {
    amountItems.speek('heey')
})