How to make chainable function in JavaScript?

前端 未结 2 1453
执念已碎
执念已碎 2020-11-28 10:13

Lets imagine function like this:

function foo(x) {
    x += \'+\';
    return x;
}

Usage of it would be like:

var x, y;
x =         


        
相关标签:
2条回答
  • 2020-11-28 10:39

    Sure, the trick is to return the object once you're done modifying it:

    String.prototype.foo = function() {
        return this + "+";
    }
    
    var str = "Notepad";
    console.log(str.foo().foo().toUpperCase());
    

    http://jsfiddle.net/Xeon06/vyFek/

    To make the method available on String, I'm modifying it's prototype. Be careful not to do this on Object though, as it can cause problems when enumerating over their properties.

    0 讨论(0)
  • 2020-11-28 10:42

    If I remember correctly, you can use "this" as a context of a function (object it belongs to) and return it to make the function chainable. In other words:

    var obj = 
    {
        f1: function() { ...do something...; return this;},
        f2: function() { ...do something...; return this;}
    }
    

    then you can chain the calls like obj.f1().f2()

    Keep in mind, you won't be able to achieve what you are expecting by calling obj.f1().toUpperCase() - it will execute f1(), return "this" and will try to call obj.toUpperCase().

    0 讨论(0)
提交回复
热议问题