この 'Controller'オブジェクトのコンストラクタを猿のパッチにしたいと思います。しかし、私はどのように私は元の呼び出しを呼び出すことができますので、私は猿のコンストラクタ機能をパッチするのですか?これが私が試したことです。どのようにオブジェクトのコンストラクタ関数をサルにパッチしますか?
// original
function Controller() {
this._tag = 'div';
}
Controller.prototype.tag = function() {
console.log(this._tag);
}
var c = new Controller();
c.tag(); // -> 'div', as expected
// patch attempt
var original = Controller;
Controller = function() {
original.apply(this);
this._tag = 'patched'; // patch
}
var c = new Controller();
c.tag(); // no method tag, prototype appears wiped...
RHS関数式の回りのグループ化演算子は余分です。 "コンストラクター"は別の関数の中で宣言されているので、外部からアクセスすることはできません(欠けているコードが外部の無名関数やその他のオブジェクトのプロパティにならない限り)。ですから、コンストラクタを "猿パッチ"にしたい場合は、コメントがある場所にコードを挿入することが唯一の方法です。 – RobG
@RobG好奇心の場合:http://en.wikipedia.org/wiki/Monkey_patch猿にかなり簡単にプロパティやメソッドをパッチしますが、コンストラクタ関数の特別な状態のために私は迷っています。あなたはこれが不可能であることは間違いないかもしれませんが、あなたがまだ述べている理由についてはわかりません。私はコードサンプルを反映するように更新します。 –
はより良いコードサンプルを追加しました。 –