Главнейшим достоинством этой техники является заметная экономия усилий программиста. С нею программисту не приходится заново, неоднократно записывать имя объекта вот в такой манере:
obj.шмяк(); obj.тыдыжжь(); obj.ынц();
Вместо этого программист может вызвать все методы
obj.шмяк().тыдыжжь().ынц();
Если же ему покажется, что такой вид записи хуже читается человеком, чем предыдущий (особенно когда у методов появляются параметры, иногда довольно обширные), то тогда программист может записывать имена методов с новой строки (JavaScript это позволяет), но всё равно экономить на имени объекта:
obj .шмяк(параметр1, параметр2, …) .тыдыжжь(параметр1, параметр2, …) .ынц(параметр1, параметр2, …);
На практике возможность такой техники обеспечивается тем, что ни один метод объекта не возвращает значение undefined. Вместо этого, если метод является командою, а не запросом (то есть выполняет некоторое действие, а не возвращает некоторое значение), то в конце его автор библиотеки пишет
Насколько я знаю, устоявшегося русского эквивалента англоязычному словосочетанию «method chaining» пока что не существует. Наверное, можно говорить
Удобство цепного вызова вызывает привыкание. Ну правда же: достаточно
Вообразите себе, например, как необыкновенно было бы удобно, кабы по холсту
ctx.beginPath() .prop({ lineWidth: 2, strokeStyle: '#333' }).moveTo(0,0) .bezierCurveTo(50,50, 80,80, 100,100) .stroke().closePath();
И средство для именно таких цепных вызовов появилось — благодаря Lea Verou. Вот оно:
![[Chainvas]](https://habrastorage.org/r/w1560/getpro/habr/post_images/b09/77b/18b/b0977b18b6fd85ecfbe1485ec689791a.jpg)
Библиотека Chainvas весит
Обёртывание DOM позволяет совершать цепные вызовы наподобие нижеследующих:
// цепной вызов DOM (объектной модели документа): document.body.appendChild( document.createElement('a') .prop({ 'href': 'http://leaverou.me', 'innerHTML': 'Lea Verou', 'title': 'Visit this awesome blog!', 'onclick': function(evt){ alert('gotcha!'); } }) .setAttribute('data-unicorns', '42') .addEventListener('mouseover', function(){ alert('don’t do this'); }, false) ); // цепной вызов CSSOM (объектной модели стилей): var css = document.body.style.prop({ color: '#245', fontFamily: 'Georgia, serif', textDecoration: 'underline' }).removeProperty('text-decoration').cssText; // цепной вызов методов classList: element.classList .add('foo') .add('bar') .toggle('baz');
Выглядит неплохо — но, понятно, при наличии jQuery всё это никому не нужно. Я бы нипочём не стал возёхаться
А вот обёртка для холстов
Сладкий, сладкий синтаксический сахар.
Не удивительно поэтому, что и саму библиотеку её автор назвала «Chainvas».

