При копировании переменной с объектом – копируется эта ссылка, а объект по-прежнему остается в единственном экземпляре. — КиберПедия 

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

При копировании переменной с объектом – копируется эта ссылка, а объект по-прежнему остается в единственном экземпляре.

2017-06-29 233
При копировании переменной с объектом – копируется эта ссылка, а объект по-прежнему остается в единственном экземпляре. 0.00 из 5.00 0 оценок
Заказать работу

Например:

var user = { name: "Вася" }; // в переменной - ссылка

var admin = user; // скопировали ссылку

Получили две переменные, в которых находятся ссылки на один и тот же объект:

Так как объект всего один, то изменения через любую переменную видны в других переменных:

var user = { name: 'Вася' };

var admin = user;

admin.name = 'Петя'; // поменяли данные через admin

alert(user.name); // 'Петя', изменения видны в user

Особенности системы наследования объектов.

В плане наследования JavaScript работает лишь с одной сущностью: объектами. Каждый объект имеет внутреннюю ссылку на другой объект, называемый его прототипом. У объекта-прототипа также есть свой собственный прототип и так далее до тех пор, пока цепочка не завершится объектом, у которого свойство prototype равно null. По определению, null не имеет прототипа и является завершающим звеном в цепочке прототипов.

 

Наследование свойств

Объекты в JavaScript — динамические "контейнеры", наполненные свойствами (называемыми собственными свойствами). Каждый объект содержит ссылку на свой объект-прототип. При попытке получить доступ к какому-либо свойству объекта, свойство вначале ищется в самом объекте, затем в прототипе объекта, после чего в прототипе прототипа, и так далее. Поиск ведется до тех пор, пока не найдено свойство с совпадающим именем или не достигнут конец цепочки прототипов.

Запрос свойства: bob -> bob.prototype -> human.prototype -> Object.prototype -> undefined.

 

hasOwnProperty(prop) — проверка наличия свойства непосредственно у объекта, не затрагивая цепочку прототипов.

Наследование "методов"

В JavaScript любая функция может быть добавлена к объекту в виде его свойства. Унаследованная функция ведёт себя точно так же, как любое другое свойство объекта, в том числе и в плане "затенения свойств" (property shadowing) - форма переопределения метода (method overriding). В области видимости унаследованной функции ссылка this указывает на наследника, а не на прототип, в котором данная функция является собственным свойством.

Объектно-ориентированное программирование, принципы, парадигмы.

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

 

Инкапсуляция - механизм объединения данных и кода обработки этих данных (функций, методов и т.п.) в объект. Работа с объектом осуществляется через интерфейс (public методы), если язык поддерживает модификатор private, то внутренняя реализация полностью скрывается от пользователя. В JS нет private полей и методов. Если это все-таки необходимо, то принято называть методы, которые не должны использоваться пользователем, начиная с '_'. Таким образом, инкапсуляция позволяет рассматривать объекты в качестве "черных ящиков" с жестко заданным набором внешне доступных методов и полей, при этом то, как реализованы эти методы, снаружи неизвестно и не важно.

 

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

 

Полиморфизм. Различные классы могут определять методы с одинаковыми именами. Как правило полиморфизм используется следующим образом: создается абстрактный класс, который определяет интерфейс, то есть как с классами подобного типа нужно взаимодействовать. Другие классы, которые будут наследоваться от абстрактного, будут реализовывать этот интерфейс. Но в JS невозможно создать абстрактный класс, можно только создать несколько классов с одинаковыми интерфейсами.

Перегрузку функций, тоже можно назвать полиморфизмом, потому что способ взаимодействия один, а данные (входные параметры) разные. Но в JS нельзя перегрузить функцию.

 


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.