Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2018, 19:11
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 50

Прототипное наследование
Здравствуйте! Я работаю с прототипным наследованием и столкнулся с делеммой при задании свойства прототипа.

Есть объект parent и конструктор Child. Child использует parent как прототип. Если я задаю свойство в Child.prototype, то оно, естественно, появляется и в объекте parent:
let parent = { };

function Child() { }
Child.prototype = parent;

Child.prototype.num = 2;

let child = new Child();

console.log( parent.num ); // 2

Мне нужно чтобы я мог задавать свойства в прототипе, но при этом чтобы объект parent не изменялся. Конечно можно задать свойство как свойство объекта child:
function Child (){
    this.num = 2;
}

Но это не экономно по памяти если я создам множество объектов child. Поэтому я хочу, чтобы свойство бралось из прототипа, но при этом чтобы объект parent не изменялся.
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2018, 19:18
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 50

У меня есть мысль сделать объект-прослойку между parent и Child где будут храниться свойства и методы Child. Наследование будет таким: parent -> childProto -> Child. При изменении прототипа Child объект parent не будет затронут, но зато можно брать его свойства. И не будет перерасхода памяти при создании множества объектов из конструктора Child. Но я не уверен оптимален ли такой ход.
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2018, 20:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Создайте доп. класс
https://youtu.be/4oudziatkLI?t=334
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2018, 20:10
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от Andrew K
Мне нужно чтобы я мог задавать свойства в прототипе, но при этом чтобы объект parent не изменялся.
Child.prototype = Object.create(parent); // вместо Child.prototype = parent;
Ответить с цитированием
  #5 (permalink)  
Старый 06.02.2018, 07:34
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 50

Спасибо за подсказку! Работает как требовалось.

Всегда считал, что Object.create() это еще один способ указать прототип наравне с обычным присваиванием вида Child.prototype = parent. Но оказывается при таком способе parent можно только читать, без возможности изменения.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление локальных переменных, наследование без прототипов 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
Прототипное наследование bFree Общие вопросы Javascript 2 18.09.2012 11:20
Наследование от встроенного Error khusamov Общие вопросы Javascript 8 01.02.2012 13:32