2016-05-29 17 views
0

Ich versuche ein flüssiges Muster zu machen, so dass ich Funktionen miteinander verketten kann. So etwas ist hier unten. Aber ich möchte das Objekt am Ende zurückgeben.Zurückgeben eines Objekts am Ende nach Verkettung

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

Im Moment scheint es, dass ich einen Zeiger/Verweis auf die create() Funktion erhalten, die ist, weil ich das bin Rückkehr nach jedem Funktionsaufruf (ich glaube?). Ich weiß, dass ich etwas wie var bar = foo.obj; machen kann, aber ich würde es wirklich begrüßen, wenn es einen Weg gäbe, das zu vermeiden. Ich bin ziemlich neu in Javascript, ich habe Typoskript verwendet, also ist mein Abschlusswissen etwas eingeschränkt, wenn das das Problem ist.

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; 
    } 
} 
+0

Es ist nicht klar, was Ihre Frage ist. Dein Code funktioniert einfach, oder? – zerkms

+0

'[" key_z "]' ist eine harte Art zu sagen '.key_z' – doug65536

+0

Ja, das weiß ich. Ich habe mich gefragt, ob es eine Möglichkeit gibt, das Objekt 'this.obj' am Ende zurückzugeben, anstatt einen Zeiger auf die' create() 'Funktion zu bekommen. –

Antwort

2

Sie sind nicht das Ergebnis der Kette zu etwas zuweisen, so bleibt foo unverändert und ist nach wie vor das Ergebnis new create().

Vielleicht wollen Sie dies tun?

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

Dann sollte foo das Objekt sein, das Sie erwarten.


Es ist schwer, Ihren genauen Anwendungsfall aus dem Beispielcode zu sagen, aber Sie könnten etwas ein wenig sauberer wie folgt schreiben:

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"); 
+0

Können Sie erklären warum? Ich fühle mich wie es ist. –

+0

Egal - Sie haben Recht. –

+1

Beachten Sie auch den 'get_obj' (im Funktionskern) und den' get_object' (im Außenbereich) Tippfehler. –

Verwandte Themen