作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想猴子修补这个“ 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...
最佳答案
你似乎想做这样的事情:
Constructor.prototype.oldTag = Constructor.prototype.tag;
Constructor.prototype.tag = function() {/* whatever */};
现在所有实例都获得了新的 tag 方法,您仍然可以根据需要调用 oldTag(或将其放回原处)。
或者你可能想做这样的事情:
var oldConstructor = Constructor;
var Constructor = function () { /* new constructor */ };
Constructor.prototype = oldConstructor.prototype;
现在您有了一个包含所有旧方法的新构造函数。或者以上都做。只需用通俗易懂的英语说出你想做什么。
关于javascript - 我如何猴子修补对象的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530466/
我是一名优秀的程序员,十分优秀!