Как определить конструктор вызывающий метод?
К примеру, есть базовый класс Animal, он имеет метод run. От Animal наследуются 2 класса потомка. Как определить какой потомок вызвал метод run? Цель - в зависимости от того, кто вызывает метод run, реализовать разный функционал.
Есть вообще технически такая возможность это узнать? instanceof в любом случае будет по цепочке прототипов искать и будет указывать, что все наследуются от Animal. То есть так не выйдет узнать по идее... Вот, что я хочу получить. Только в случае с this это, похоже, тоже не работает. function Animal () { this.run = function () { if (this === Beaver) { console.log('beaver running'); } else if (this === Deer) { console.log('deer running'); } }; } function Beaver () { } Beaver.prototype = new Animal(); function Deer () { } Deer.prototype = new Animal(); var deer = new Beaver(); deer.run(); |
Супер-класс не должен ничего знать о классах наследующих от него.
Читай про супер методы. http://javascript.ru/forum/offtopic/...kriptorov.html |
ivanWantsToKnow,
function Animal () { this.run = function () { if (this.constructor === Beaver) { console.log('beaver running'); } else if (this.constructor === Deer) { console.log('deer running'); } }; } function Beaver () { } Beaver.prototype = new Animal(); Beaver.prototype.constructor = Beaver; function Deer () { } Deer.prototype = new Animal(); Deer.prototype.constructor = Deer; var deer = new Beaver(); deer.run(); |
function Animal () { console.log('new Animal'); } Animal.prototype.run = function () { console.log('animal runing'); }; function Beaver () { Animal.apply(this, arguments); console.log('new Beaver'); } Beaver.prototype = new Animal(); Beaver.prototype.constructor = Beaver; Beaver.prototype.run = function () { console.log('beaver runing'); }; function Deer () { Animal.apply(this, arguments); console.log('new Deer'); } Deer.prototype = new Animal(); Deer.prototype.constructor = Deer; Deer.prototype.run = function () { console.log('deer runing'); }; var deer = new Deer(); var beaver = new Beaver(); deer.run(); beaver.run(); |
Всем спасибо! С вашей помощью справился!
|
Animal={ clone: function(type){var o=Object.create(this); if(type)o.type=type; return o}, run: function(){alert(this.type+" is running")} } Beaver=Animal.clone("Beaver") Deer=Animal.clone("Deer") beaver=Beaver.clone() deer=Deer.clone() beaver.run() deer.run() |
Часовой пояс GMT +3, время: 16:01. |