JavaScript melhor maneira de modificar o protótipo de função
Desejo criar um construtor de construtores. Em relação a este tópico:JavaScript constrói um construtor de construtores, parece que as únicas soluções são:
Function.prototype.add = function(name, value) {
this.prototype[name] = value;
};
Function.prototype.remove = function(name) {
delete this.prototype[name];
};
Mas não quero modificar o genéricoFunction
protótipo ... e também:
var A = new ConstBuilder().add('test', function() {
console.log('test');
}).getConstructor();
Mas não quero ter um objeto wrapper em torno do próprio construtor.
O problema é que geralmente os construtores criam novos objetos, herdando métodos do protótipo do construtor. O que estou tentando fazer é instanciar funções em vez de objetos, mas a única maneira de modificar uma propriedade de protótipo de função é modificar sua__proto__
propriedade:
var constructorPrototype = {
add : function(name, value) {
this.prototype[name] = value ;
}
} ;
var ConstBuilder = function() {
var constructor = function() {} ;
constructor.prototype = {} ;
// The only way (?), but quite deprecated...
constructor.__proto__ = constructorPrototype ;
return constructor ;
} ;
// Not working way...
//ConstBuilder.prototype = constructorPrototype ;
var A = new ConstBuilder() ;
A.add('test', function() {
console.log('test') ;
}) ;
var a = new A() ;
a.test() ; // "test"
constructorPrototype.remove : function() {
delete this.prototype[name] ;
} ;
A.remove('test') ;
a.test() ; // Error: test is not a function.
Nota esteA.prototype
não éA.__proto__
mas A.prototype
é(new A).__proto__
.
E funciona perfeitamente modificando__proto__
, que pena. Eu li que o Firefox integrou um "Object.setPrototypeOf ()", mas é apenas experimental.
Seria outra maneira de fazer o que desejo fazer?