JavaScript лучший способ изменить прототип функции
Я хочу создать конструктор конструкторов. Относящиеся к этой теме:JavaScript построить конструктор конструкторовВроде бы единственные решения:
Function.prototype.add = function(name, value) {
this.prototype[name] = value;
};
Function.prototype.remove = function(name) {
delete this.prototype[name];
};
Но я не хочу изменять общийFunction
прототип ... а также:
var A = new ConstBuilder().add('test', function() {
console.log('test');
}).getConstructor();
Но я не хочу иметь обертку объекта вокруг самого конструктора.
Проблема в том, что обычно конструкторы создают новые объекты, наследуя методы от прототипа конструктора. Я пытаюсь создать экземпляры функций вместо объектов, но единственный способ изменить свойство прототипа функции - это изменить его__proto__
имущество :
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.
Заметка тотA.prototype
не являетсяA.__proto__
но A.prototype
является(new A).__proto__
.
И это прекрасно работает, модифицируя__proto__
какой позор. Я читал, что Firefox интегрировал «Object.setPrototypeOf ()», но это только эксперимент.
Будет ли это еще один способ сделать то, что я хочу сделать?