The '__proto__' property is deprecated. (W103) jshint

Всем привет. В общем и целом: The '__proto__' property is deprecated. (W103) - вот такую PROBLEMS'у выдает мне jshint в VSCode редакторе, когда я пытаюсь сделать один объект прототипом другого объекта следующим способом:

let cat = {
hp: 580,
food = 1000
}

let dog = {
hp: 100
}

dog.__proto__ = cat;

Почитал про prototype и __proto__. Одно для функций, другое для объектов. Xочется избавиться от проблемсы этой, как можно это сделать?


Ответы (1 шт):

Автор решения: vsemozhebuty

Возможно, вам и правда будет проще использовать синтаксический сахар классов. Но если вам не нужна вся механика классов, а нужно простое наследование, есть другие варианты.

  1. Чтобы не получать подобных сообщений, можно использовать Object.setPrototypeOf(). Но как вы прочитаете в статье по ссылке, изменение прототипа объекта после создания неэффективно.

  2. Можно использовать Object.create() с одним аргументом, создав пустой объект dog и потом изменить нужные свойства. Но если в подчинённом объекте вы хотите создавать свойства, которых нет в объекте-прототипе, это опять-таки не советуется разработчиками движков (по крайней мере V8) — добавление или удаление полей объекта после создания замедляет работу движка с этим объектом.

  3. Наиболее универсальный и немного более сложный путь — использовать Object.create() со вторым аргументом, с объектом дескрипторов, в котором можно задать не только изменённые, но и новые свойства.

→ Ссылка