Rozšiřte nativní prototypy v Node.js

Jako někdo, kdo byl v legendárním týmu JavaScriptu MooTools, mám určitou náklonnost k rozšiřování prototypů nativních objektů. Praxe rozšiřování prototypů je v dnešní době samozřejmě tabu, protože dodavatelé prohlížečů iterují a implementují nové specifikace rychleji než v éře IE6, ale rozšiřování nativních verzí v Node.js mohlo být považován za bezpečnější, protože teoreticky máme větší kontrolu nad prostředím (verze Node.js).

Rozšíření nativního kódu v rámci Node.js je poměrně jednoduché:

// Inside a file module called "String.prototype.startsWith.js"
// Naming convention important for maintenance and clearness of intent

// This is a very, very simple shim not made for production use
// It's simply to illustrate the prototype extension
// More logic should be added for edge cases 
if(!String.prototype.startsWith) {
  String.prototype.startsWith = function(term) {
    return this.substr(0, term.length) === term;
  };
}

// ----------

// Inside any other module that wants to use the extension
require('String.prototype.startsWith');

// Usage
if(myString.startsWith('Moo')) {
  // ...
}

Pokud požadujete modul, který obsahuje kód rozšíření, nativní bude mít požadovanou další metodu. To se samozřejmě netýká pouze domorodců, stejným způsobem můžete rozšířit další objekty. Když prozkoumáte npm, můžete najít spoustu prototypových rozšíření, z nichž jedno je String.prototype.startsWith, které funguje také v kódu na straně klienta.

Předpokládám, že se dočkám nějaké nenávisti za to, že navrhuji, aby tato praxe byla s Node.js více v pořádku, tak se na mě obracejte!