• Наследование DOM интерфейсов?

    @4Koshik
    Попробуй так:
    //Запускаем
    function testing() {
    //создаём объекты наследующие прототип EventTarget
    	let myObj1 = new MyObj("obj1");
    	let myObj2 = new MyObj("obj2");
    	
    	//Запускаем метод walk
    	myObj1.walk(7);//гулять 7 секунд
    	myObj2.walk(2);//гулять 2 секунды
    	
    	//не забываем подписаться на события, генерируемы нашим объектом
    	myObj1.addEventListener("WalkBegin", onWalkBegin);//начало прогулки
    	myObj2.addEventListener("WalkBegin", onWalkBegin);
    	
    	myObj1.addEventListener("WalkEnd", onWalkEnd);//конец прогулки
    	myObj2.addEventListener("WalkEnd", onWalkEnd);
    }
    
    //класс MyObj наследующий EventTarget
    //По сути это новый объект EventTarget с расширенными свойствами и методами
    function MyObj(name){
    	var eventTarget = new EventTarget();
    	eventTarget.name = name;//добавляем свойство имя
    	eventTarget.walk = (timeToWalkInSec) => { //добавляем метод гулять
    		eventTarget.dispatchEvent(new Event("WalkBegin")); //кидаем событие "начал гулять"
    		setTimeout( () => {
    			eventTarget.dispatchEvent(new Event("WalkEnd"));//кидаем событие "закончил гулять"
    		}, timeToWalkInSec * 1000);
    	}
    	return eventTarget; //!!! Ключевое место. Вместо того чтобы возвращать this мы возвращаем расширенный объект
    }
    
    function onWalkBegin(event){ //обработчик события
    	console.log(event.target.name + " begin walk");
    }
    
    function onWalkEnd(event){//обработчик события
    	console.log(event.target.name + " end walk");
    }
    Ответ написан
    Комментировать