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]; }