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

* Javascript › Наследование на основе прототипа

Класс впервые был сформулирован в 1967 году на языке под названием Simula. В то время как прототипная модель впервые прозвучала в SmallTalk примерно в 1980-х годах. Но мы можем смоделировать классический язык на языке-прототипе, таком как Javascript, вы не можете сделать наоборот. Java недостаточно мощен, потому что мы не можем написать стиль Javascript на Java (это недостаточно хорошо), но мы можем сделать наоборот.

ПРОТОТИП

Работа с прототипами.

1. Создайте объект, который вам нравится
2. Создайте новые экземпляры, которые наследуют от этого объекта.
3. Настройте новый объект. (Таксономия и классификация не нужны).

Эта модель программирования иногда называется Делегирование (дифференциальное наследование)
Простые термины: вы создаете объект и наследуете только для того, чтобы сделать новый объект отличным от старого объекта, что объясняет термин дифференциальное наследование. (Он содержит только различия)

Таким образом, каждый объект в Javascript внутренне ссылается на другой объект, называемый его прототипом. Сам объект-прототип ссылается на другой объект, который является его прототипом, и продолжается до тех пор, пока не достигнет NULL. Если вы заметили, что это цепочка объектов, связанных друг с другом, и вершина этой цепочки пуста. Эта цепочка называется цепочка прототипов, а весь процесс называется прототипное наследование.

У объектов есть атрибут прототипа

1. Прототип: Object или null
2. Object.create(object, properties…) — что позволяет нам создать новый объект, который наследуется от существующего объекта, или мы также можем скопировать материал из существующего объекта в новый объект. . Копирование объекта может быть выполнено
3. Object.getPrototypeOf(object) — получение прототипа.
Изначально у него не было Object.create, вместо него был оператор New, который изменяет способ работы вызова.

Он пытался выглядеть классическим, но это совсем не так. (Больше не используйте новый)
Некоторые проблемы

Проблема for in. Функции, унаследованные от прототипа, включаются в перечисление for in.

В некоторых случаях нам нужно быть осторожными. Но это решается в ES5 после введения Object.keys(object) — который возвращает ключи этого конкретного объекта.

НАСЛЕДСТВО

Мы можем создать конструктор, который, очевидно, является объектом. Каждая пустая функция называется конструктором.

У нас есть outerMethod, который присоединен к прототипу функции. Итак, если мы напечатаем функцию, мы увидим это

Посмотрите, у функции есть прототип, и она показывает outerMethod. Теперь, если мы создадим объект из этой функции-конструктора, используя новое ключевое слово

Из приведенного выше кода, если мы увидим, что Jaguar наследуется от объекта Car, который имеет единственный innerMethod, но если мы попытаемся получить доступ к externalMethod также правильно вернул вывод без какой-либо ошибки ссылки, потому что это связано с цепочкой прототипов.

когда мы пытаемся получить доступ (ссылаться) на свойство, которое объект не содержит сам по себе, цепочка прототипов проходится до тех пор, пока не будет найдено доступное свойство или пока не будет достигнут конец цепочки прототипов (т.е. NULL). Если он найден, он возвращает свойство, если нет, он возвращает undefined.
GET — это ГЛУБЖЕ, а SET — это SHALLOW.

РОДИТЕЛЬСКИЙ ОБЪЕКТ (ГЛАВНЫЙ)

Все, что является javascript, является объектом и в основном исходит из родительского объекта (прототипное наследование). И каждый дочерний элемент может получить доступ к любому методу/свойству любого родителя в всей цепочке прототипов.

Это все стада!