Chaining — приём, при котором после вызова каждого метода возвращается исходный объект, таким образом, появляется возможность выполнять несколько методов последовательно, а не вызывать их по отдельности. На его использовании построены методы многих библиотек, например, jQuery:
$('div').addClass('active').on('click', function() {
$(this).toggleClass('active');
});
При создании своих функций конструкторов достаточно закончить каждый метод строчкой return this
, чтобы появилась возможность выплнять методы последовательно:
// конструктор в любом случае вернёт объект
// здесь писать строчку return this необязательно
var Sword = function(isSharp) {
this.isSharp = isSharp;
};
Sword.prototype.sharpen = function() {
if (!this.isSharp) {
this.isSharp = true;
}
console.log('Sword was sharpened');
// возвращаем this
return this;
};
Sword.prototype.kill = function() {
console.log(this.isSharp ? 'Fatality!' : 'Done some damage');
this.isSharp = false;
// возвращаем this
return this;
};
Теперь, когда каждый метод возвращает исходный объект, можно последовательно использовать методы:
var sword = new Sword(false);
sword
.kill() // Done some damage
.sharpen() // Sword was sharpened
.kill() // Fatality!
.kill(); // Done some damage