Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   И снова наследование (https://javascript.ru/forum/misc/74814-i-snova-nasledovanie.html)

kurganoffiv 09.08.2018 11:55

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

Почему так работает
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

Nexus 09.08.2018 12:48

В строке 12 наследуете прототип, в строке 15 все удаляете и определяете прототип заново.
Отформатировать код можно тут: http://jsbeautifier.org/

Malleys 09.08.2018 15:03

Наследование обычно делается так (обратите внимание на свойство __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 (обратите внимание, что в синтаксисе класса после метода не нужна запятая)

kurganoffiv 09.08.2018 15:59

Большое спасибо.


Часовой пояс GMT +3, время: 23:10.