Oltre a Math.random
, le funzioni integrate in JS sono puramente di progettazione. Non dovresti ricavare una funzione con la dichiarazione new
che non farà il lavoro giusto per te.
JavaScript è un linguaggio di programmazione multi-paradigma che espone sia i sensi functional
e oop
. Quindi, avete funzioni pure senza prototipo:
Math.round // whose typeof is function
Math.floor // whose typeof is also function
Sopra, Math
possa essere percepita come uno spazio dei nomi, invece di un tipo di oggetto. Quindi è solo un contenitore che fornisce un set di funzioni per te.
Al contrario, se si fa riferimento a funzioni del prototipo oggetti in JavaScript, si otterrà un indefinito a meno che non si fa riferimento a loro tramite prototipo:
Array.map // undefined
Array.reduce // undefined
Questo è dovuto al fatto materia che Array non è progettato per essere un namespace come Math, è una classe di oggetti in senso OOP. Quindi è necessario chiamare la funzione tramite il suo esempio come:
var list = new Array(3);
list.map(function(a){ return 1 });
In caso contrario, si può fare riferimento alla funzione tramite prototype
per ottenere l'accesso alla funzione di puro dove this
oggetto non è vincolata.Vedi seguente dichiarazione:
var list = [1,2,3];
typeof(Array.prototype.map); // It's pure, unbound
Array.prototype.map.call(list, function(a){ return a*2 }); // Usage in a purely-functional way
Il significato di questo è, JavaScript è stato progettato per essere scrivibile sia in OOP e modi funzionali. Potresti aver bisogno di giocare con il prototipo di funzione dato che ti ho fornito alcuni esempi sopra e questo ti chiarirà ulteriormente :)