Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.06.2015, 23:33
Аватар для ivanWantsToKnow
Интересующийся
Отправить личное сообщение для ivanWantsToKnow Посмотреть профиль Найти все сообщения от ivanWantsToKnow
 
Регистрация: 29.01.2015
Сообщений: 15

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

Последний раз редактировалось ivanWantsToKnow, 23.06.2015 в 00:23.
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2015, 00:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Супер-класс не должен ничего знать о классах наследующих от него.
Читай про супер методы.

Множественное наследование, супер методы, наследование дескрипторов
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2015, 01:04
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 456

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();
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2015, 08:22
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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();
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2015, 10:04
Аватар для ivanWantsToKnow
Интересующийся
Отправить личное сообщение для ivanWantsToKnow Посмотреть профиль Найти все сообщения от ivanWantsToKnow
 
Регистрация: 29.01.2015
Сообщений: 15

Всем спасибо! С вашей помощью справился!
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2015, 15:44
Аспирант
Отправить личное сообщение для jackdempsey2015 Посмотреть профиль Найти все сообщения от jackdempsey2015
 
Регистрация: 23.06.2015
Сообщений: 53

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()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить на каком элементе произошло событие hover(или mouseenter)? Boshnik Оффтопик 10 24.03.2014 11:04
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как определить активное окно/вкладку? Chameleon Events/DOM/Window 5 19.03.2012 08:59
как определить шрифты scuter Общие вопросы Javascript 9 19.05.2008 14:32