解決策は少し明白すぎるように思えるので、問題は元のコードにアクセスできないことであり、より動的な解決策が必要なのだろうかと思います。
その場合、コンストラクターを独自のコンストラクターでオーバーライドし、元のコンストラクターを呼び出してから、オブジェクトを更新するという1 つのオプションがあります。
元のコード:
some.thing = function() {
this.somefn = function() { // this is the function that I need to fix
...
}
}
あなたのコード:
// cache a reference to the original constructor
var _thing = some.thing;
// your constructor
some.thing = function() {
// invoke the original constructor on the new object.
_thing.apply(this, arguments);
this.somefn = function() { /*your updated function*/ };
};
// maintain inheritance
some.thing.prototype = Object.create(some.thing.prototype);
// make an instance
var theThing = new some.thing();
これで、元のコンストラクターとプロトタイプ チェーンの利点が得られますが、作成されるオブジェクトに独自の関数を挿入することになります。
唯一の問題は、置き換えた元の関数が元のコンストラクターの変数スコープを特別に使用できることです。その場合、解決すべき問題が発生します。
自分のメソッドを呼び出す前に上書きした元のメソッドを保持して呼び出すことができます。この状況がそれを必要とするかどうかはわかりません。