Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.08.2018, 11:55
Новичок на форуме
Отправить личное сообщение для kurganoffiv Посмотреть профиль Найти все сообщения от kurganoffiv
 
Регистрация: 21.07.2018
Сообщений: 6

И снова наследование
Господа, доброго времени суток.
Вопрос новичка, прошу помощи

Почему так работает
function Parent(){
}

Parent.prototype = {
sayParent(){
console.log('im parent');
}
}

function Child(){
}
Child.prototype = Object.create(Parent.prototype);

//вопрос в механизме назначения методов
Child.prototype.sayChild = function(){
console.log('im child');
}

var test = new Child();
test.sayParent() // im parent
test.sayChild() // im child

А так нет
function Parent(){
}

Parent.prototype = {
sayParent(){
console.log('im parent');
}
}

function Child(){
}
Child.prototype = Object.create(Parent.prototype);

//вопрос в механизме назначения методов
Child.prototype = {
sayChild(){
console.log('im child');
}
}

var test = new Child();
test.sayParent() // im parent
test.sayChild() // НЕ РАБОТАЕТ

И как корректно определять большое количество методов для Child
Ответить с цитированием
  #2 (permalink)  
Старый 09.08.2018, 12:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,787

В строке 12 наследуете прототип, в строке 15 все удаляете и определяете прототип заново.
Отформатировать код можно тут: http://jsbeautifier.org/
Ответить с цитированием
  #3 (permalink)  
Старый 09.08.2018, 15:03
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Наследование обычно делается так (обратите внимание на свойство __proto__):

function Parent() {}

Parent.prototype = {
	sayParent() {
		console.log("im parent");
	}
};

function Child() {}

Child.prototype = {
	__proto__: Parent.prototype,

	sayChild() {
		console.log("im child");
	},

	myMethod() {},

	myOtherMethod() {},
};

var test = new Child();
test.sayParent();
test.sayChild();


Тоже самое может быть записано так... (что является более предпочитаемой записью в JavaScript)
class Parent {
	sayParent() {
		console.log("im parent");
	}
}

class Child extends Parent {
	sayChild() {
		console.log("im child");
	}

	myMethod() {}

	myOtherMethod() {}
}

var test = new Child();
test.sayParent();
test.sayChild();


Сообщение от kurganoffiv
И как корректно определять большое количество методов для Child
В примерах выше вы видите два добавленных метода myMethod, myOtherMethod (обратите внимание, что в синтаксисе класса после метода не нужна запятая)
Ответить с цитированием
  #4 (permalink)  
Старый 09.08.2018, 15:59
Новичок на форуме
Отправить личное сообщение для kurganoffiv Посмотреть профиль Найти все сообщения от kurganoffiv
 
Регистрация: 21.07.2018
Сообщений: 6

Большое спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование от Ext.Ajax khusamov ExtJS 1 31.01.2017 21:07
Добавление локальных переменных, наследование без прототипов ryslan-yc Общие вопросы Javascript 2 29.01.2017 19:54
Наследование Angular dormammun Angular.js 0 05.01.2016 00:51
Прототипное наследование не распространяется на вложенные свойства? novikov Общие вопросы Javascript 4 19.11.2012 14:31
Наследование класса-замыкания и вызов метода предка BobiKK Общие вопросы Javascript 2 21.03.2010 13:26