Как определить конструктор вызывающий метод?
К примеру, есть базовый класс 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, время: 02:03. |