2016-05-11 44 views
5

Bir İşlevin prototipini dinamik olarak genişletmenin kötü bir uygulama olup olmadığını bilmek istiyorum. Bunu, özellik adını ve prototipe eklenecek işlevi alan statik bir yöntem kullanarak yapmayı düşünüyorum.JavaScript: prototip dinamik olarak kötü bir uygulama mı uzatıyor?

Bu kötü bir uygulama mı?

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

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

Yalnızca izini sürmenin zor olduğu noktaya suistimal ederseniz (ki, açıkçası, genellikle ne olur). Şahsen, programımdaki meta seviyesine ulaşmayı tercih ederim. –

+0

Bu, kötü bir uygulamadır çünkü kodunuz çalışmıyor :-) Bu, 'this.task' yerine 'task' olmalı ve 'this.prototype [id] = task; ' – Bergi

+0

I' şeklinde kısaltılmalıdır Emin değilim ama sanırım .apply' ile bazı performans sorunları var. – Rajesh

cevap

0

Ben eklenmektedir bir [kimlik] yöntemi sınıf içinde overidden alırsa hiçbir kontrole sahip gibi, bu durumda kötü bir uygulama olduğunu söyleyebilirim. Kodunuz, ilk yöntem overidden aldığında bilmek ve böylece rastgele kodunuzu kırma yolu yoktur ne kadar sahip

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

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

.

+0

Bu, yeni bir tane eklemeden önce prototipe eklenen yöntemleri kontrol ederek çözülebilir. Fakat bu kontrol sizde varsa, prototipi bu şekilde genişletmek kötü bir uygulamadır? – javascripter