Замена конструктора класса
Ребята, подскажите, пожалуйста, если кто с этим сталкивался.
Как изменить конструктор класса? - есть готовый класс A (в его код лезть нельзя) его реализация следующая:
function A(name) { this.name=name; this.getName() }
A.prototype.getName = function(){ alert(this.name)}
всё просто. есть еще функция B = function() { alert('foo');} как правильно реализовать подмену, чтобы была следующая логика?
(function(){
var old_construct = A.prototype.constructor ;
A.prototype.constructor = function() {
B(); //выполненеие моего кода
old_construct.apply(this,arguments); // исполнение оригинального конструктора
}
})()
то есть, чтобы после вызова
var v1 = new A('test');
сначала произошел alert('foo'), a потом alert('test'); |
Нужно отнаследовать какой-нибудь C от A, после чего
A = C; |
в приведенной статье используется функция extend(c1,c2), которая в результате полностью заменяет конструктор родительского класса. это совсем не то что нужно. Нужна обертка для конструктора класса.
|
var oldA = A;
A = function() {
B();
return oldA.apply(this, arguments);
};
|
С этого я и начинал.)) Дело в том, что после
A = function() {...}
класс A теряет все свои проперти и становится объектом-функцией.. |
Возвращает-то он объект конструктора oldA. Если нужно свойства ещё какие-то -- так восстановите.
|
(function() {
function A(name) { this.name=name; this.getName() }
A.prototype.getName = function(){ alert(this.name)}
B = function() { alert('foo'); };
var newA = function(name) { B(); this.constructor(name); }
newA.prototype = A.prototype;
A = newA;
new A('test');
})();
|
Помогите, пожалуйста, похожая проблема. В наличии есть mootools. читал уже и этот топик . пробовал и так и сяк - не получается задача:
Есть объявление класса:
var Original = new Class({
dosome: function () { alert('do: orig'); }
});
нужно внедрить в этот класс в функцию dosome вызов другой функции CallOther (). Т.е. заменить объект dosome () своим кодом и после этого вызвать оригинальный т.е. чтобы стало: var Original = new Class({
dosome: function () { CallOther (); this.parent(args); }
});
|
Вот что у меня получилось:
var OriginalCopy = new Class ();
OriginalCopy.prototype.dosome= Original.prototype.dosome;
Original.prototype.dosome= function () {
alert(arguments);
OriginalCopy.prototype.dosome.apply (this, arguments);
}
Правильно ли так делать? |
| Часовой пояс GMT +3, время: 19:50. |