Dan*_*nor 10 javascript monkeypatching
我想修补这个'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...
Run Code Online (Sandbox Code Playgroud)
你似乎想做一些事情:
Constructor.prototype.oldTag = Constructor.prototype.tag;
Constructor.prototype.tag = function() {/* whatever */};
Run Code Online (Sandbox Code Playgroud)
现在所有实例都获得了新的标记方法,如果你想要(或者把它放回去)你仍然可以调用oldTag.
或许你想要做的事情如下:
var oldConstructor = Constructor;
var Constructor = function () { /* new constructor */ };
Constructor.prototype = oldConstructor.prototype;
Run Code Online (Sandbox Code Playgroud)
所以现在你有了一个包含所有旧方法的新构造函数.或者做以上两点.只需用简单的英语说出你想做什么.
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |