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 ()», но это только эксперимент.

Будет ли это еще один способ сделать то, что я хочу сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос