JavaScript:如何将多个参数传递给对象成员中的回调函数?

使用插件时,我偶尔偶然发现一个有这样的东西:

  • 它将采用构造函数参数。
  • 一些参数解析为函数。
  • 其中一些将采取多种争论。

像这样:

{ color: function (someData, moreData) { return someData + moreData; } } 

如何将两个参数传递给该函数?

注意:我无法更改插件,因此将第二个参数移动到另一个构造函数参数不是一个选项。

示例JavaScript:

 (function ($) { $.fn.greenify = function (options) { var settings = $.extend({ color: function (someData, moreData) { // <-- THIS TAKES 2 ARGUMENTS! return someData + moreData; }, }, options); return this.css({ color: settings.color, }); }; }(jQuery)); $("#target1").greenify({ color: "blue" }); $("#target2").greenify({ color: ["bl", "ue"] // <-- In your answer only this should be changed }); 

我的目标:

 
My Thing
// <-- will be blue
My Thing2
// <-- will be black but should be blue

FIDDLE DEMO


更新:我对这段代码的一个重大误解感到沮丧

 $("#target1").greenify({ color: "blue" }); 

将值"blue"交给function (someData, moreData)作为第一个参数someData这是假的! 实际发生的是默认的回调( function (someData, moreData) )完全被字符串"blue"取代!

如何将两个参数传递给该函数?

你没有。 jQuery呢。 它是一个回调函数,用于在.css()方法中动态确定color属性 – 请参阅文档 。

实际上,这个默认函数没有任何意义,因为它应该返回一个css颜色值,但返回以元素索引为前缀的旧值 – 这绝对不是一种颜色。

所以只需使用$("#target2").greenify({color: "black"})

如果你想传递一个函数,那也是可能的 – 但是它会覆盖,而不是调用那个默认函数。 一个例子:

 $("div").greenify({ color: function(index, prevColor) { return ["blue", "black"][index % 2]; } }); 
 var settings = $.extend({}, options); if($.isArray(options.color)) { settings.color = function () { return options.color.join(''); }; } 

小提琴: http : //jsfiddle.net/2QBGm/

看到这个jsFiddle

我对您的代码进行了一些更改,现在它可以按照您的需要进行操作。

我使用options对象来获取参数:

 color: function () { return options.color[0] + options.color[1]; }