Skip to content

Instantly share code, notes, and snippets.

@eskayamadeus
Created June 27, 2023 22:07
Show Gist options
  • Save eskayamadeus/47ccbc6f755c6b152065868048188699 to your computer and use it in GitHub Desktop.
Save eskayamadeus/47ccbc6f755c6b152065868048188699 to your computer and use it in GitHub Desktop.
How to perform method chaining in JS
// Source: https://www.typescriptlang.org/play?target=1&ssl=42&ssc=3&pln=21&pc=1&q=316#code/PTAEDEFcDsGMBcCWB7apYAsCGjq4OagCCACgJIDOoWATgKbXrIC2zqoADlvPHTWrgBQIUACksANywBlWDUQd4AGlAB3DIkzosaZlgDWDAJ7JINJgBMGAM2SxIFOheFhVieBlAAbOhSq5eGmYnRFojUCkvSF9qaAtQOiwKRD5QeGRQeixnEQAjOlgsBwZkazSMOkRzaF8kaEIAR0gsL3cUigA6QRdiTMSvL3DYFjY0UjI1DS1VZBp9KglQ9GxcAh7EKgArAEVomiMO0AAJPgYN2ISADyxmDh9QUtAdvaMe-IJQYvi3D3KGeCMHBi1hoLFAABE6NZVrxBgAVQFOABc3UQt1m8FAABJQCCwQAiTZNPhGfEAbm6IhO9AA5FQdFcbncGMUHmUPAxniTiOQUYIsQAKfEAYmgkkQ+G4KGg+IAlB1YH4hbksLB9PhQTALPiVPj6Nr5RUJRh4AKAMwABgt8us2ToZGgAoATFbZRSemQyiZINQLPEsKALMhMewOd5cAwsLlkBI6CpvTSBqBHHQegGvKhCK0KCGytYYAhpZ1QHCNFQuDw+AIqIkKOF0j16BxQRZILAzmhxFJZPJFIdSwxDOFzulQHpDMmzKmRN7qF5VFgjFR6PAzGgwxQbiVcpsCvAuj1qWd6Wg6NdbvdxpNNJ45IlePTljg8PUeuN+xVQEPQCOMthYxcpiBLiBZIOw6g3j0hh0BwVDwDQqr6GyP7QIEYpeMm8DcHGsT+mgyA7nu16YD0Z4cMgjhwZ+V4eNwP70vOi7LnQq78E4B7DNAOa+hYcIzAAcpAzD5DQVAALygAKOa0JiEkAIyyqAYkAHygAA3oIoDeCxoBoBJ0k0PA7paZx3FYBwiBKepmlaaAIhkBedDBKhCSqp4+ZwGBAhoN65jjDZWnZBYAq4LASK6UJIlWQp1m2bZaAANQSaFFJxVpK5rtQFmpbZAC+SjdHFzYBAKikaWlTBccgPgdBm+ACtAboBbZGX8FliA5Vp+U2blOWtWg5kdYIvWUmAADqUyeC0GaqFRDCbsEmFGPcjxXkkajTmAm6qChTy7CSfJBXxyCCcJfAUAKCkdEF5ryjd8rFahpXXX6l1NYepx0owyTMIgXi0IyjnEZ4xSPrA-1+Hy4NJFQRB+qdIlUOVnDyFIvC6eF0CRXwxmVTmNBtukNBSVhhlWdasW2R4GwdHpmEyTluWFZwkC5K0sA8SFcDRWVzXU50dP87ToAJShsCdX0rHrmWjPMxwrPsyjJW83FpnVXQtXIPVQuNRL-XlBsstMx99A-pi5y4NQhaoHyNQ7XDFgI+dzp3a9Zqu8FD3yE9Htve6IilucZ5MvcXx-CWiI9go8A9ACQIodYpxwP8GTNjGiBWIwC71sgPRp4smfpNVHyjl2MhyNHnDcGhnSjRAsxjrMDDB45VChmWKIgD0oAALSA8ySLDFYPfWDNQA
// Here is an example API which creates a chaining
// API. The key is to have an outer function which
// keeps track of internal state, and an object which
// exposes the API that is always returned.
const addTwoNumbers = (start = 1) => {
let n = start;
const api = {
// Implement each function in your API
add(inc: number = 1) {
n += inc;
return api;
},
print() {
console.log(n);
return api;
},
};
return api;
};
// Which allows the same style of API as we
// saw in jQuery:
addTwoNumbers(1).add(3).add().print().add(1);
// Here's a similar example which uses a class:
class AddNumbers {
private n: number;
constructor(start = 0) {
this.n = start;
}
public add(inc = 1) {
this.n = this.n + inc;
return this;
}
public print() {
console.log(this.n);
return this;
}
}
// Here it is in action:
new AddNumbers(2).add(3).add().print().add(1);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment