2014-11-07 95 views
1

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

这里是我的对象的例子..

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

因此,当按钮被点击并呼吁我想在参数传递的param1param2功能doSomething

可能与此类似,但这不起作用。

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

任何想法,或者我要对这个错误的方式?

+1

http://jsfiddle.net/dfumwxL7/这里 – TysonWolker 2014-11-07 00:49:03

+0

感谢@TysonWolker的作品太好了! – ferne97 2014-11-07 00:58:01

+0

@TysonWolker这个解决方案非常好,但是假设你可以修改doSomething函数来以这种方式使用它。如果目标函数已经过了编码或接受三个参数并且我们想要保留这个概念呢? – Kolban 2014-11-07 01:04:35

回答

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,我们正在说使用它的“正常”上下文。
  • 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的值。

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

How can I pass arguments to event handlers in jQuery?

+0

在文档中找不到解释。我相信它不会起作用。 – zerkms 2014-11-07 01:06:12

+0

@zerkms你能澄清评论吗?链接到jQuery.proxy()不起作用?有什么我们可以进一步讨论它的文档? – Kolban 2014-11-07 01:07:30

+1

我确定所提出的解决方案并未实现正确的部分应用程序。见http://jsfiddle.net/qwwc1qwj/ – zerkms 2014-11-07 01:07:56