2016-05-29 3 views
0

Я пытаюсь создать жидкую структуру, чтобы я мог объединить функции вместе. Что-то вроде этого ниже. Но я хочу вернуть объект в конце.Возвращаем объект в конце после цепочки

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

Прямо сейчас, кажется, что я получаю указатель/ссылку на функцию create(), что, потому что я вернуть это после каждого вызова функции (я думаю?). Я знаю, что могу сделать что-то вроде var bar = foo.obj;, но я был бы очень признателен, если бы был способ избежать этого. Я довольно новичок в Javascript, я использовал TypScript раньше, чтобы мои знания о закрытии несколько ограничены, если это проблема.

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

Это не ясно, что ваш вопрос. Ваш код просто работает, не так ли? – zerkms

+0

'[" key_z "]' это трудный способ сказать '.key_z' – doug65536

+0

Да, я знаю это. Мне было интересно, есть ли способ вернуть объект 'this.obj' в конце, а не получать указатель на функцию' create() '. –

ответ

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

Можете ли вы объяснить, почему? Я чувствую, что это то же самое. –

+0

Ничего, ты прав. –

+1

Также обратите внимание на 'get_obj' (в ядре функции) и опечатку' get_object' (снаружи). –

 Смежные вопросы

  • Нет связанных вопросов^_^