链接后返回一个对象

时间:2016-05-29 01:46:21

标签: javascript fluid chaining

我试图制作一个流畅的模式,以便我可以将功能链接在一起。这样的事情如下。但我想在最后归还对象。

var foo = new create();
foo.x("hello")
   .y("howdy!")
   .z("hello")
   .get_obj();

现在似乎我得到了create()函数的指针/引用,这是因为我在每次函数调用后返回这个(我猜?)。我知道我可以做var bar = foo.obj;之类的事情,但我真的很感激是否有办法避免这种情况。我对Javascript很新,我以前使用的是Typescript,所以我的闭包知识有限,如果这就是问题。

function create() {
    this.obj = {}

    this.x = function(value) {
        this.obj["key_x"] = value;
        return this;
    }

    this.y = function(value) {
        this.obj["key_y"] = value;
        return this;
    }

    this.z = function(name) {
        this.obj["key_z"] = value;
        return this;
    }

    this.get_obj = function() {
        return this.obj;
    }
}

1 个答案:

答案 0 :(得分:2)

您没有将链的结果分配给任何内容,因此foo保持不变,仍然是new create()的结果。

也许你的意思是这样做?

var foo = new create()
   .x("hello")
   .y("howdy!")
   .z("hello")
   .get_object();

然后foo应该是您期望的对象。

很难从示例代码中告诉您确切的用例,但您可能会写一些像这样的清洁用法:

function Create();
Create.prototype = {
    x: function(value) {
        this["key_x"] = value;
        return this;
    },

    y: function(value) {
        this["key_y"] = value;
        return this;
    },

    z: function(value) {
        this["key_z"] = value;
        return this;
    }
}

var foo = new Create()
   .x("hello")
   .y("howdy!")
   .z("hello");