Как наследование прототипа экономит память? - PullRequest
2 голосов
/ 14 июня 2019

Я изо всех сил пытался понять, как именно наследование прототипа по сравнению с установкой метода для каждого нового объекта, созданного с помощью конструктора, экономит память. __proto__ указывает на прототип родительского конструктора, но из чтения MDN кажется, что все методы прототипа родительского объекта копируются в объект __proto__. Итак, чем же это отличается от непосредственного создания пар ключ-значение на объекте-экземпляре?

1 Ответ

2 голосов
/ 14 июня 2019

Методы прототипа родителя не копируются в __proto__.Свойство __proto__ является просто ссылкой на него.Вы можете доказать это, используя строгий оператор сравнения равенства JavaScript:

child.__proto__ === parent.prototype  // true

Это точно такой же объект, а не копия оригинала.Если эта информация вас удивляет, учтите, что объекты в JavaScript хранятся по ссылке .Поэтому, если у вас есть такой объект:

const obj = {
  prop: 'value'
};

И вы присваиваете этот объект другой переменной:

const obj2 = obj;

Нет двух отдельных объектов, скорее есть две переменные, каждая из которых имеетссылка на тот же объект.Ссылки не занимают пространство объекта, они просто указатели памяти.Другими словами, объект существует один раз, и есть две переменные со ссылками на него.

...