Me gustaría poner parche al constructor para este objeto 'Controlador'. ¿Pero cómo parcheo mono la función del constructor para poder llamar al original? Esto es lo que he intentado.¿Cómo ajusto el par la función de constructor de un objeto?
// 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...
El operador de agrupamiento alrededor de la expresión de la función RHS es superfluo. El "constructor" se declara dentro de otra función, por lo que no puede acceder desde el exterior (a menos que el código que falta lo haga una propiedad de la función anónima externa u otro objeto). Entonces, si quiere "parche de mono" al constructor (lo que sea que eso signifique), insertar el código donde tiene el comentario es la única manera. – RobG
@RobG Si es curioso: http://en.wikipedia.org/wiki/Monkey_patch Es bastante directo al parche de mono una propiedad o método, pero debido al estado especial de las funciones del constructor no puedo. Puede estar en lo correcto al decir que esto no es posible, pero no estoy seguro de las razones por las que aún no lo ha hecho. Actualizaré la muestra del código para reflejar. –
agregó una mejor muestra de código. –