One of the ideological sticking points of the first JavaScript framework was was extending prototypes vs. wrapping functions. Frameworks like MooTools and Prototype extended prototypes while jQuery and other smaller frameworks did not. Each had their benefits, but ultimately all these years later I still believe that the ability to extend native prototypes is a massive feature of JavaScript. Let’s check out how easy it is to empower every instance of a primitive by extending prototypes!
Every JavaScript native, like Number
, String
, Array
, Object
, etc. has a prototype
. Every method on a prototype
is inherited by every instance of that object. For example, we can provide every `Array
instance with a unique
method by extending its prototype:
Array.prototype.unique = function() { return [...new Set(this)]; } ['1', '1', '2'].unique(); // ['1', '2'] new Array('1', '1', '2').unique(); // ['1', '2']
Note that if you can also ensure chaining capability by returning this
:
['1', '1', '2'].unique().reverse(); // ['2', '1']
The biggest criticism of extending prototypes has always been name collision where the eventual specification implementation is different than the framework implementation. While I understand that argument, you can combat it with prefixing function names. Adding super powers to a native prototype so that every instance has it is so useful that I’d never tell someone not to extend a prototype. #MooToolsFTW.
5 Awesome New Mozilla Technologies You’ve Never Heard Of
My trip to Mozilla Summit 2013 was incredible. I’ve spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out. MozSummit provided the perfect reminder of how brilliant my colleagues are and how much…
PHP IMDB Scraper
It’s been quite a while since I’ve written a PHP grabber and the itch finally got to me. This time the victim is the International Movie Database, otherwise known as IMDB. IMDB has info on every movie ever made (or so it seems). Their…
Cross Browser CSS Box Shadows
Box shadows have been used on the web for quite a while, but they weren’t created with CSS — we needed to utilize some Photoshop game to create them. For someone with no design talent, a.k.a me, the need to use Photoshop sucked. Just because we…