如何将参数传递给对象文字中的函数

时间:2014-11-07 00:41:24

标签: javascript jquery object-literal

我在对象文字中有很多代码,并且有几个函数,我希望能够传递参数的函数参数,但我无法弄清楚如何做到这一点。

这是我的对象的一个​​例子..

var test = {
    button: $('.button'),
    init: function() {
        test.button.on('click', this.doSomething);
    },
    doSomething: function(event, param1, param2) {
        console.log(param1);
        console.log(param2);
    }
};

因此,当点击按钮并调用函数doSomething时,我想传递param1param2的参数。

可能有类似的东西,但这不起作用。

test.button.on('click', this.doSomething('click', 'arg1', 'arg2'));

任何想法,或者我是否采取了错误的方式?

1 个答案:

答案 0 :(得分:3)

jQuery.proxy()函数似乎正是您所需要的。好好阅读文档,看看它们是否对你有意义。对于您的具体示例,

var test = {
    button: $('.button'),
    init: function() {
        test.button.on('click', $.proxy(this.doSomething, null, 'arg1', 'arg2');
    },
    doSomething: function(param1, param2, event) {
        console.log(param1);
        console.log(param2);
    }
};

在此示例中,$.proxy的参数为:

  • this.doSomething - 要调用的函数
  • null - 将调用函数的上下文。通过提供null,我们说要使用其正常的'上下文。
  • arg1 - 被调用函数的param1形式参数的值
  • arg2 - 被调用函数的param2形式参数的值

由于click回调提供了最终参数(事件),因此已经提供了该参数,并且不需要另外或显式声明。传递附加参数时jQuery.proxy()传递形式参数列表的处的那些参数,并且最后传递隐式提供的任何剩余参数。所以如果我们看起来像一个函数:

var f = function(a, b, c) {
    console.log(a, b, c);
};

并通过代理调用它:

var p = $.proxy(f, null, 2, 3);
p(1);

记录的a,b和c的值为2,3,1。

这个问题也非常接近这个问题。

How can I pass arguments to event handlers in jQuery?