在javascript闭包模块中链接的方法

时间:2017-04-27 18:19:18

标签: javascript

这是js gurus的问题。我想在编码如下的js模块中启用方法链接。我也希望每种方法都能够返回各种值的对象字面值。在如何编码的上下文中,我将如何启用函数链,例如method2()。method3()

谢谢!

var module1Constructor = (function() {

    // methods:

    var init = function() {

        var someValue = 'value';

        method2().method3(); // chained method calls

        return {module1:'iDontKnow',returnedValue1:someValue}; // how to pass value back to enable function chaining?       

    }; // init


    var method2 = function() {

        var someValue = 'value';

        return {module1:'iDontKnow',returnedValue1:someValue}; // how to pass value back to enable function chaining?       

    }; // method2


    var method3 = function() {

        var someValue = 'value';

        return {module1:'iDontKnow',returnedValue1:someValue}; // how to pass value back to enable function chaining?       

    }; // method3


    return function module1Constructor() {

        this.init = init;

    } // return function module1Constructor() {


})(); // module1Constructor 


var module1 = new module1Constructor;

module1.init();

3 个答案:

答案 0 :(得分:0)

如果用户无法访问方法链接,该如何进行链接? 所以你可能想写一个函数的原型,使它成为一个常规的构造函数:

function module1Constructor(){
    //...
    }
module1Constructor.prototype={
         test:1,
         a:function(){
           alert(this.test++);
           return this;
          },
         //extended
         b:function(){
            return Object.assign(new module1Constructor(),this,{c:alert});
         }
 };

像这样使用:

test=new module1Constructor().a().a().a().a();
test.a().c();//doesnt work
test.a().b().c();//does work
test.a().b().a();

答案 1 :(得分:0)

不要投票,因为我还没有发表评论,术语方法链接与原型更相关,在这种情况下,我在你的评论中看到的是你想要访问的值函数,称为闭包,这是一种在函数的词法范围之外调用函数时访问值的方法。所以在你的对象文字中你要返回,你可以这样做。

 var method2 = function() {

    var someValue = 'value';

    return {module1:'iDontKnow',returnedValue1:someValue, method3:method3};

 }

答案 2 :(得分:0)

我要关闭这个问题。回到"绘图板" ...感谢您的评论。经过进一步的研究,我发现许多人都在寻求和我一样的东西:结构性的"起动器"代码模板,它结合了揭示模块模式的封装优势,可能具有基于原型的继承性能。我想我正在寻找一个"金发女郎"可维护性/可读性和性能之间的模式。