Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:如何将多个参数传递给对象内的回调函数';谁的会员?_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

JavaScript:如何将多个参数传递给对象内的回调函数';谁的会员?

JavaScript:如何将多个参数传递给对象内的回调函数';谁的会员?,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,在使用插件时,我有时会遇到这样的插件: { color: function (someData, moreData) { return someData + moreData; } } 它将使用构造函数参数 一些参数解析为函数 其中一些需要多次辩论 像这样: { color: function (someData, moreData) { return someData + moreData; } } 如何向该函数传递两个参

在使用插件时,我有时会遇到这样的插件:

{
    color: function (someData, moreData) {
        return someData + moreData;
    }
}
  • 它将使用构造函数参数
  • 一些参数解析为函数
  • 其中一些需要多次辩论
像这样:

{
    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
});
将值
“blue”
交给
函数(someData,moreData)
作为第一个参数
someData
这是错误的实际情况是默认回调(
函数(someData,moreData)
)被字符串
“blue”
完全替换

如何向该函数传递两个参数

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

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

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

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

$("div").greenify({
    color: function(index, prevColor) {
        return ["blue", "black"][index % 2];
    }
});
小提琴:看到这个了吗

我对你的代码做了一些更改,现在它可以按照你的要求工作了

我使用options对象获取参数:

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

实际上,您不必更改构造函数(),但我想您无论如何都必须更新插件主体。我猜您没有向我们显示实际的插件,因为您发布的内容没有多大意义(但可能是插件编码人员的错误)。如果是这样的话,请链接到真正的源代码。@Bergi:这向我提出了这个问题。但我的问题不是关于设计决策。我对JS的功能很好奇。相关的一行是-它用多个参数调用具有给定名称的方法(例如,
$(…)。选择2(“data”,someValues,true)
)。这就是你想要的吗?或者您想知道更多关于如何设计jQuery插件以及如何使用
.apply
?谢谢。这是初始问题的一个很好的解决方案。除此之外,我仍然对处理上述示例的方法感到好奇。OP说他无法更改插件!OP说他无法更改插件@谢谢你的通知。我以为插件是另外一回事。我没有完全理解这个问题。我的问题是,这实际上会覆盖
函数(someData,moreData){…}
还是只将其返回值传递给原始函数中的第一个参数
someData
?是的,它会在
设置
对象上替换它。调用这个函数是不可能的,因为你无法从外部访问它(如果不使用一些丑陋的黑客,比如破坏
$.extend
),我会接受这个答案,因为这是最合适的(指向最后一部分)-基本上这个问题包含了一个设计缺陷,任何插件都不会有。
var settings = $.extend({}, options);
if($.isArray(options.color)) {
    settings.color = function () {
        return options.color.join('');
    };
}
color: function () {
    return options.color[0] + options.color[1];
}