JavaScript:如何将多个参数传递给对象成员内的回调函数
JavaScript: How to pass multiple arguments to a callback function inside an object's member?
在使用插件时,我有时会偶然发现一个具有以下内容的插件:
- 它将采用构造函数参数。
- 某些参数解析为函数。
- 其中一些需要多个参数。
喜欢这个:
{
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
});
我的目标:
<div id="target1">My Thing</div> // <-- will be blue
<div id="target2">My Thing2</div> // <-- will be black but should be blue
小提琴演示
更新:我陷入了一个重大的误解,即这段代码
$("#target1").greenify({
color: "blue"
});
将值"blue"
作为第一个参数someData
交给function (someData, moreData)
。这是假的!实际发生的是默认回调(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
我已经对您的代码进行了一些更改,现在它正在按您的要求工作。
我使用选项对象来获取参数:
color: function () {
return options.color[0] + options.color[1];
}
相关文章:
- 如何将从XML读取的值存储到本地对象's成员使用.get()函数
- Javascript映射对象成员以返回新的扁平对象
- 如何访问对象's成员通过另一种方法填充的方法
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- CakePHP错误:在非对象上调用成员函数get(),使用cakejavascript助手时出错
- JavaScript 对象中的私有成员,带有 getter 和 setter
- 对象'未设置的数据成员值
- 控制台返回[Object-Object]而不是对象成员
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 从JavaScript对象访问数据's数组成员变量
- 对象属性不是在工厂成员函数内部创建的
- 在 JavaScript 中,如何有条件地向对象添加成员
- 如何在 Javascript 中将函数绑定到对象数据成员的更改
- 为什么在访问一个新对象的成员之前将其括在括号中
- console.log表示,当我调用对象的任何成员时,对象都是未定义的
- 如何使用正则表达式查找对象成员名称
- 如何向对象添加函数并引用其成员
- 访问javascript中对象类型的数组成员
- 在对象内部使用 for-in 循环来访问其成员
- 如何使用 Object.create() 而不是 new 创建具有私有成员的对象