Прототипное наследование
Здравствуйте! Я работаю с прототипным наследованием и столкнулся с делеммой при задании свойства прототипа.
Есть объект 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 не изменялся. |
У меня есть мысль сделать объект-прослойку между parent и Child где будут храниться свойства и методы Child. Наследование будет таким: parent -> childProto -> Child. При изменении прототипа Child объект parent не будет затронут, но зато можно брать его свойства. И не будет перерасхода памяти при создании множества объектов из конструктора Child. Но я не уверен оптимален ли такой ход.
|
Создайте доп. класс
https://youtu.be/4oudziatkLI?t=334 |
Цитата:
Child.prototype = Object.create(parent); // вместо Child.prototype = parent; |
Спасибо за подсказку! Работает как требовалось.
Всегда считал, что Object.create() это еще один способ указать прототип наравне с обычным присваиванием вида Child.prototype = parent. Но оказывается при таком способе parent можно только читать, без возможности изменения. |
Часовой пояс GMT +3, время: 12:31. |