Я пытаюсь подключить создание объектов в 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 не является функцией из-за вызова afterConstruction ранее для этого объекта.
Любая помощь или улучшения в моем строительном крючке приветствуются.
Function
не очень хорошая идея. Я не копался в вашем коде, но вы, вероятно, проверили бы, есть ли другой способ достичь вашей цели. - person pex   schedule 03.11.2010