WHAT IS METHOD CHAINING
Method chaining is a common syntax in object-oriented programming for invoking multiple method calls. The class methods must return the current object using the
this
keyword.METHOD CHAINING EXAMPLES
- Method chaining in Javascript
function Client() {
this.name = null;
this.phone = null;
}
Client.prototype = {
getName: function () {
return this.name;
},
setName: function (value) {
this.name = value;
return this;
},
setPhone: function (value) {
this.phone = value;
return this;
}
};
alert(new Client().setName('John Smith').setPhone('+1 (555) 123-4567').getName()); // prints John Smith - Method chaining in jQuery
$('ul')
.find('a:eq(1)')
.addClass('active')
.text('Test')
.css('color', 'red')
.show(); - Method chaining in PHP
<?php
class Client {
private $name;
private $phone;
public function setName($value) {
$this->name = $value;
return $this;
}
public function setPhone($value) {
$this->phone = $value;
return $this;
}
public function getName() {
return $this->name;
}
}
$client = new Client();
echo $client->setName('Jane Doe')->setPhone('+1 (546) 854-9551')->getName(); // prints Jane Doe
?>
METHOD CHAINING AND ERROR HANDLING
Throwing errors or returning boolean values from a method could break the chain, so proper error handling is a must.
function Client() {
this.error = null;
this.email = null;
this.birthday = null;
}
Client.prototype = {
getError: function () {
return this.error;
},
hasError: function () {
return this.error !== null;
},
getInfo: function () {
return ['Send a mail to ', this.email, ' at ', this.birthday].join('');
},
setBirthday: function (value) {
if (!/^d{4}-d{2}-d{2}$/.test(value)) {
this.error = 'Invalid ISO date.';
return this;
}
this.birthday = value;
return this;
},
setEmail: function (value) {
if (!/[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}/i.test(value)) {
this.error = 'Invalid email address';
return this;
}
this.email = value;
return this;
}
};
var client = new Client();
if (!client.setEmail('www.domain.com').setBirthday('1987-10-29').hasError()) {
console.log(client.getInfo());
} else {
console.log(client.getError());
}
CONCLUSION
Method chaining could be extremely useful when it comes to execution of multiple consecutive methods over a single object.