【发布时间】:2010-11-04 21:19:24
【问题描述】:
我正在尝试在 Javascript 中创建对象。这对于方法来说很容易,但对于构造函数来说并不容易。我无法更改创建对象的方式,因为这必须适用于当前库。
不管怎样,这就是我现在所拥有的:
Function.prototype.afterConstruction = function(hookFunc) {
var oldObj = this;
var newObj = function() {
oldObj.apply(oldObj, arguments);
hookFunc.apply(oldObj, arguments);
}
newObj.prototype = oldObj.prototype; //copy prototype fields of oldObj
for (var key in oldObj) { //copy static fields of oldObj
if (oldObj.hasOwnProperty(key)) newObj[key] = oldObj[key];
}
return newObj;
};
它是这样使用的:
SomeObj = SomeObj.afterConstruction(function() {
//executed after SomeObj construction
});
问题是它似乎在原型方法上产生了问题,即使我复制了原型。
此问题显示在以下 jsfiddle 中:http://www.jsfiddle.net/6rBTZ/1/
如果你用 firebug 运行它,它会给你一个 _thisInstance.onTextChange is not a function,因为之前在这个对象上调用了 afterConstruction。
感谢任何对我的施工挂钩的帮助或改进。
【问题讨论】:
-
抱歉,但我认为扩展
Function原型并不是一个好主意。我没有深入研究您的代码,但您可能会检查是否有其他方法可以实现您的目标。 -
如果有另一种方法可以在不修改源代码中的对象的情况下向对象添加挂钩,请详细说明。
标签: javascript debugging constructor hook aop