如何将参数传递给对象文字中的函数
问题描述:
我在对象文字中有很多我的代码,并且有几个函数我希望能够传递参数的函数参数,但是我不能弄清楚如何做到这一点。如何将参数传递给对象文字中的函数
这里是我的对象的例子..
var test = {
button: $('.button'),
init: function() {
test.button.on('click', this.doSomething);
},
doSomething: function(event, param1, param2) {
console.log(param1);
console.log(param2);
}
};
因此,当按钮被点击并呼吁我想在参数传递的param1
和param2
功能doSomething
。
可能与此类似,但这不起作用。
test.button.on('click', this.doSomething('click', 'arg1', 'arg2'));
任何想法,或者我要对这个错误的方式?
答
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,我们正在说使用它的“正常”上下文。
- 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);
所记录的将是一个2,3,1,b和c的值。
这个问题也非常接近这个问题。
http://jsfiddle.net/dfumwxL7/这里 – TysonWolker 2014-11-07 00:49:03
感谢@TysonWolker的作品太好了! – ferne97 2014-11-07 00:58:01
@TysonWolker这个解决方案非常好,但是假设你可以修改doSomething函数来以这种方式使用它。如果目标函数已经过了编码或接受三个参数并且我们想要保留这个概念呢? – Kolban 2014-11-07 01:04:35