2016-05-11 12 views
5

Voglio sapere se estendere dinamicamente il prototipo di una funzione è una cattiva pratica. Sto considerando di farlo utilizzando un metodo statico che riceve il nome della proprietà e la funzione da aggiungere al prototipo.JavaScript: si sta estendendo il prototipo dinamicamente a una cattiva pratica?

È una cattiva pratica?

function Test() { 
    this.condition = false; 
} 

Test.extend = function(id, task) { 
    this.prototype[id] = function() { 
     return task.apply(this, arguments); 
    }; 
}; 
+7

Solo se si abusa al punto in cui tenere traccia è difficile (che, francamente, di solito è ciò che accade). Personalmente, preferisco non raggiungere quel livello di meta nella mia programmazione. –

+0

È una cattiva pratica perché il tuo codice non funziona :-) Dovrebbe essere 'task' invece di' this.task', e dovrebbe essere abbreviato in 'this.prototype [id] = task;' – Bergi

+0

I ' Non sono sicuro, ma suppongo che ci siano alcuni problemi di prestazioni con '.apply'. – Rajesh

risposta

0

direi che è cattiva pratica in questo caso, come si ha alcun controllo su di se un metodo di [id] viene aggiunto viene overidden dall'interno della classe.

var test = new Test(); 
test.extend("example", function() { 
    console.log("First Method"); 
}); 

test.extend("example", function() { 
    console.log("Second Method"); 
}); 

Con modo in cui il codice è, non si ha modo di sapere quando il primo metodo viene overidden e quindi in modo casuale rompere il vostro codice.

+0

Bene, questo può essere risolto controllando i metodi aggiunti al prototipo prima di aggiungerne uno nuovo. Ma se hai questo controllo, estendere il prototipo in questo modo è una cattiva pratica? – javascripter

Problemi correlati