[javascript] aggiunta di funzioni personalizzate in Array.prototype


1 Answers

Mentre il potenziale per lo scontro con altri bit o 'code l'override di una funzione su un prototipo è ancora un rischio, se vuoi farlo con le moderne versioni di JavaScript, puoi usare il metodo Object.defineProperty, disattivando il bit enumerabile, per esempio

// functional sort
Object.defineProperty(Array.prototype, 'sortf', {
    enumerable: false,
    value: function(compare) { return [].concat(this).sort(compare); }
});
Question

Stavo lavorando su un'applicazione asp.net abilitata per AJAX. Ho appena aggiunto alcuni metodi a Array.prototype come

Array.prototype.doSomething = function(){
   ...
}

Questa soluzione ha funzionato per me, essendo possibile riutilizzare il codice in un modo "carino".

Ma quando ho provato a lavorare con l'intera pagina, ho avuto dei problemi .. Avevamo alcuni estensori ajax personalizzati e hanno iniziato a comportarsi come imprevisti: alcuni controlli venivano visualizzati "non definiti" attorno al suo contenuto o valore.

Quale potrebbe essere la causa? Mi manca qualcosa sulla modifica del prototipo degli oggetti standard?

Nota: sono abbastanza sicuro che l'errore inizi quando modifico il prototipo per Array. Dovrebbe essere compatibile solo con IE.




In generale, fare scherzi con gli oggetti javascript di base è una cattiva idea. Non sai mai cosa potrebbero aspettarsi eventuali librerie di terze parti e cambiare gli oggetti principali in javascript le cambia per tutto.

Se usi Prototype è particolarmente brutto perché il prototipo ha dei problemi con l'ambito globale ed è difficile dire se stai andando a scontrarsi o meno. In realtà modificare le parti principali di qualsiasi lingua è di solito una cattiva idea anche in javascript.

(Lisp potrebbe essere la piccola eccezione lì)






Related