AVIL13
@AVIL13

Как создать цепочку вызовов из объектов в JavaScript?

Доброго времени суток.

Возник вопрос, как создавать цепочки вызовов из объектов.

К примеру есть npm модуль cli-color
и в нем можно делать вызовы методов в разной последовательности:

var clc = require('cli-color');

clc.red('this is red'); // первый вариант
clc.red.bold('this is red and bold'); // второй вариант
clc.red.bold.underline('this is red and bold and underline'); // третий вариант


И так можно выстраивать цепочки вызововов.

Подскажите, как такое сделать на чистом js с передачей параметра в конечную функцию, так же как и в примере?
  • Вопрос задан
  • 1983 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
function test() {
  //your work with state
  test._state = {}; //reset state
}
Object.defineProperties(test, {
  _state: {
    enumerable: false,
    writable: true,
    value: {}
  },
  t1: {
    get: function() {
      test._state.t1 = true;
      return test;
    }
  },
  t2: {
    get: function() {
      test._state.t2 = true;
      return test;
    }
  }
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
abyrkov
@abyrkov
JavaScripter
Может быть getter & setter?
В get нужно контекировать функцию с this.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Для выстраивания цепочки вызовов, можно возвращать из методов ссылку на объект, а чтобы обращаться к методу, как к атрибуту, можно использовать Proxy.

var obj = new Proxy({
    f1: function() {
      console.log('1');
      return this;
    },
    f2: function() {
      console.log('2');
      return this;
    }
  },
  {
  get: function(target, name) {
    if(name in target) {
      return target[name]();
    }
  }
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы