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.
How to Create a RetroPie on Raspberry Pi – Graphical Guide
Today we get to play amazing games on our super powered game consoles, PCs, VR headsets, and even mobile devices. While I enjoy playing new games these days, I do long for the retro gaming systems I had when I was a kid: the original Nintendo…
Dynamic Waveform Visualizations with wavesurfer.js
Waveform images are an awesome addition to boring audio widgets. They can be functional as well as aesthetically pleasing, allowing users to navigate audio visually. I recently found wavesurfer.js, an amazing waveform image utility that uses to Web Audio API to create super customizable…
dwProgressBar v2: Stepping and Events
dwProgressBar was a huge hit when it debuted. For those of you who didn’t catch my first post, dwProgressBar is a MooTools 1.2-based progress bar which allows for as much flexibility as possible. Every piece of dwProgressBar can be controlled by CSS…
Source: davidwalsh.name