Замена конструктора класса
Ребята, подскажите, пожалуйста, если кто с этим сталкивался.
Как изменить конструктор класса? - есть готовый класс 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, время: 17:24. |