Een van de ideologische knelpunten van het eerste JavaScript-framework was het uitbreiden van prototypen versus inpakfuncties. Frameworks zoals MooTools en Prototype verlengden prototypes, terwijl jQuery en andere kleinere frameworks dat niet deden. Elk had zijn voordelen, maar uiteindelijk, al die jaren later, geloof ik nog steeds dat de mogelijkheid om native prototypes uit te breiden een enorm kenmerk van JavaScript is. Laten we eens kijken hoe gemakkelijk het is om elke instantie van een primitieve kracht te geven door prototypes uit te breiden!
Elke JavaScript-native, zoals Number
, String
, Array
, Object
enz. heeft een prototype
. Elke methode op a prototype
wordt geërfd door elke instantie van dat object. Zo kunnen wij elke `Array
bijvoorbeeld met een unique
methode door het prototype uit te breiden:
Array.prototype.unique = function() { return [...new Set(this)]; } ['1', '1', '2'].unique(); // ['1', '2'] new Array('1', '1', '2').unique(); // ['1', '2']
Merk op dat als u ook kettingcapaciteit kunt garanderen door terug te keren this
:
['1', '1', '2'].unique().reverse(); // ['2', '1']
De grootste kritiek op het uitbreiden van prototypes is altijd naambotsing geweest waarbij de uiteindelijke specificatie-implementatie anders is dan de raamwerkimplementatie. Hoewel ik dat argument begrijp, kun je het bestrijden door functienamen als voorvoegsel te gebruiken. Het toevoegen van superkrachten aan een native prototype zodat elke instantie het heeft, is zo handig dat ik nooit iemand zou vertellen een prototype niet uit te breiden. #MooToolsFTW.
Welkom bij Mijn nieuwe kantoor
Mijn eerste professionele webontwikkeling was in een kleine drukkerij waar ik de hele dag in een raamloze kubus zat. Ik heb bijna vijf jaar geleden onder die ingesloten omgeving voordat ik een baan op afstand kon vinden waar ik vanuit huis werkte. De eerste…
CSS pointer-gebeurtenissen
De verantwoordelijkheden die CSS op zich neemt, lijken steeds meer te vervagen met JavaScript. Houd rekening met de
-webkit-touch-callout
CSS-eigenschap, die voorkomt dat het koppelingsdialoogmenu van iOS verschijnt wanneer u een klikbaar element blijft aanraken. Depointer-events
eigenschap is nog meer JavaScript-achtig, waardoor wordt voorkomen dat: klikacties worden uitgevoerd…