我在对象文字中有很多代码,并且有几个函数,我希望能够传递参数的函数参数,但我无法弄清楚如何做到这一点。
这是我的对象的一个例子..
var test = {
button: $('.button'),
init: function() {
test.button.on('click', this.doSomething);
},
doSomething: function(event, param1, param2) {
console.log(param1);
console.log(param2);
}
};
因此,当点击按钮并调用函数doSomething
时,我想传递param1
和param2
的参数。
可能有类似的东西,但这不起作用。
test.button.on('click', this.doSomething('click', 'arg1', 'arg2'));
任何想法,或者我是否采取了错误的方式?
答案 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
的参数为:
param1
形式参数的值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。
这个问题也非常接近这个问题。