2013-05-09 3 views
2

Я искал в google и прочитал много статей о js pattern, n запутался. Я просматриваю stackoverflow и все еще запутался. Итак, я думаю, я должен спросить здесь. (Я все еще новичок в javascript)javascript pattern: вызов нескольких методов

Я хочу «создать модуль, singleton или что-то в этом роде, а затем перевернуть/вызвать несколько методов за одно и то же время».

Exmple: Yourlib.getId('elmID').setColor('somecolor').setHtml('somehtml').show().blaa.blaa.blaa

Как создать базовый шаблон?

var Yourlib = (function() { 
    var anyPrivateVar = blablabla; 
    anyFunctions(){ 
     any stuff... 
    } 

    return { 
     setHtml: blablabla, 
     method2: function() { 
      anything... 
     } 
     getId: function() { 
      anything... 
     }, 
     setColor: function() { 
      anything... 
     }, 
     show: function() { 
      anything... 
     } 
    } 
}()) 

Как создать шаблон, чтобы я мог вызвать/бросить метод в одно и то же время? Yourlib.getId('elmID').setColor('somecolor').setHtml('somehtml').show().blaa.blaa.blaa

+0

Добавьте 'return this' в конец каждого из этих (безпользовательских) методов. – raina77ow

+0

Поиск ** Свободные интерфейсы ** или ** метод цепочки ** –

+0

@ raina77ow, Спасибо, я добавлю это значение для каждого метода (без использования). Спасибо за вашу помощь. –

ответ

0

Я думаю, что вы просите методы цепочки. Вот простой пример. Ключ к return объект назад.

var obj = { 
    method1: function() { alert('first'); return obj; }, 
    method2: function() { alert('second'); return obj; }, 
    method3: function() { alert('third'); return obj; }, 
    method4: function() { alert('fourth'); return obj; } 
} 

obj.method1().method2().method3().method4(); 

Live Demo

+0

Whoaa спасибо, сэр! Оно работает. Итак, все методы должны возвращать объект? –

+0

Да, так работает цепочка. Пожалуйста, примите ответ, если он вам поможет. –

+0

Спасибо, сэр! Конечно, ответ мне помог. Это принятый ответ, и я хочу проголосовать, но недостаточно репутации: D –

0

Это называется method chaining и используется heavily in jQuery. Вы просто возвращаете текущий контекст методов, которые вы хотите, чтобы быть в состоянии цепи:

show: function() { 
    // allow chaining 
    return this; 
} 
+0

Спасибо, сэр! Да, методы цепочки - это то, что они ищут. И я узнаю о возвращении «this» –

+0

Это относится к текущей области, и иногда это может сбивать с толку в JavaScript. В вашем случае это ссылка на модуль, который содержит метод chainable. –

1

Эта модель иногда называют «цепочка» или, при использовании для класса параметров, которые в конечном итоге построить какой-нибудь другой класс, то " строитель ".

В принципе, каждый способ возвращает объект, по которому могут быть вызваны последующие методы (как правило, объект совпадает с тем, на котором вызывается текущий метод).

В JavaScript, вы могли бы сделать это следующим образом:

var Point = function(x, y) { 
    this.x = x; 
    this.y = y; 
}; 

var PointBuilder = function() { 
    this.x = null; 
    this.y = null; 
}; 

PointBuilder.prototype.setX = function(x) { 
    this.x = x; 
    return this; // <= so that one can call .setY() on the result 
}; 

PointBuilder.prototype.setY = function(y) { 
    this.y = y; 
    return this; // <= so that one can call .setX() on the result 
}; 

PointBuilder.prototype.build = function() { 
    return new Point(this.x, this.y); 
}; 

Код выше тривиальный пример, но вы получите идею. В принципе, верните из своих методов или верните еще один объект, который предоставляет оставшиеся доступные методы.

+0

Спасибо за ответ. Я узнаю больше об этом, потому что иногда это запутывает, где «это» ссылается на –

0

Вы должны взглянуть на "беглых" APIs тоже. Я лично не думаю, что слишком много свободного опыта, но людям нравится, как они читают, особенно при написании тестов.

Кроме того, цепочка может быть отличным способом фактического расчета «отложить» (вид ленивой оценки) - см. Метод подчеркивания _.chain() в сочетании со своим методом value() [Я не думаю, что подчеркивание действительно что-то делает слишком причудливо, но]

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