Автор оригинала: Madhan Ganesh L.
JavaScript имеет интересный способ наследования. Причина обусловлена его классовой природой и где каждая конструкция на языке является объектом. На статических языках, таких как C #, вы получаете класс с другого класса. В JavaScript вы получаете объект из другого объекта. Так что это означает это подразумевает?
Давайте сломаем это к небольшому, но конкретному примеру. Ниже приведен крошечный JavaScript объект, который представляет форму (со своими свойствами).
var shape = { type: 'circle', radius: 2 };
Давайте наследуем этот класс, используя синтаксис JavaScript:
var myShape = Object.create(shape); // print the properties of myShape console.log(myShape.type); // prints 'circle' console.log(myshape.radius); // print '2'
Это ясно указывает на MyShape «наследует» свойства от формы. Подождите минуту, что только что произошло, 2 объекта разделяют память памяти свойств.
Прототип наследования
Это называется прототипным наследством. Что делает его таким интересным, это следующие шаги, которые обнаруживаются ниже. Изменим значение свойства в производном объекте (MyClass).
myClass.radius = 5;
На этом этапе копия создается только для свойства, которая обновляется в унаследованном объекте. После этого обновления планировка памяти будет выглядеть так:
Прототипное наследование после изменения сделано
После того, как копия производится в производном объекте, родитель является свойством не изменяется. Чтобы получить более конкретно, давайте распечатаем свойства:
console.log(shape.radius); // this is still 2console.log(myShape.radius); // this is 5 now
Также обратите внимание на свойство, которое не изменилось (например, «тип») в производном объекте все равно будет продолжать делиться значением от родительского объекта.
Заключение
- В JavaScript объект наследует другой объект
- Производное объект, по-видимому, не зависит, но разделяет свойства своего родительского объекта
- Только когда происходит любое обновление для любого свойства, копия создается в производном объекте