JS:将单参数函数转换为可链接函数

时间:2013-11-14 22:18:12

标签: javascript chaining

采用任何单参数函数并将其链接到另一个函数的最简单方法是什么?

所以这看起来像......

red = function (target) {target.$.style.backgroundColor("red");}
blue = function (target) {target.$.style.backgroundColor("blue");}
body = $("body");
red(body);
#body is now red
makeFunctionChainable(blue);
body.blue()
#body is now blue

3 个答案:

答案 0 :(得分:1)

如果我了解您要做的事情,您实际上可以定义对象原型的全局扩展,这样您就可以在任何对象上调用red()blue()

Object.prototype.red = function()
{
    $(this).css('background-color', 'red');
    return this;
};

Object.prototype.blue = function()
{
    $(this).css('background-color', 'blue');
    return this;
};

然后你可以这样使用它:

$('body').red().blue();

我应该注意这是不好的做法,你只想用jQuery元素 相反,你应该为它编写一个jQuery扩展。

答案 1 :(得分:0)

你可以通过返回一些可以链接的东西来进行链接,例如this

var setColors = (function(){
    var target = null;
    var setTarget = function(t) {
        target = t;
        return this;
    };
    var color = function (colorChange) {
        target.$.style.backgroundColor(colorChange);
        return this;
    };
    return {setTarget: setTarget, setColor: color};
})();

var body = $("body");
//sets the red than blue immediately 
setColors.setTarget(body).setColor('red').setColor('blue');

答案 2 :(得分:0)

只有在function1返回的元素具有function2

时才可以进行链接

示例

var obj = {
  red: function(target) {target.$.style.backgroundColor("red");return this;},
  blue: function(target) {target.$.style.backgroundColor("blue");return this;}
};

并使用

obj.red(body).blue(body);