Наблюдения я буду приводить на классе - конструкторе Object
, так как отдельно о этих свойствах ничего не нашел. На Современный учебник Javascript есть ООП в прототипном стиле, но конкретного определения нету.
Я пошел на сайты Веб-документация MDN - Mozilla, MSDN – сеть разработчиков Microsoft на который прочел про данные свойства.
Начнем со свойства constructor
.
Object
, создавшую прототип экземпляра. Обратите внимание, что
значение этого свойства является ссылкой на саму функцию, а не
строкой, содержащей имя функции. Для примитивных значений, вроде 1,
true или "test", значение доступно только для чтения.JavaScript
, за исключением объектов Global
и Math
. Свойство constructor
содержит ссылку на функцию, которая создает экземпляры данного конкретного объекта.В первом пункте я не понял, что они подразумевают под словосочетанием ...создавшую прототип экземпляра
.
Пример, на основе которого буду наглядно разбирать пункт 1.
function Class() {}
var exemplar = new Class;
Объект(экземпляр) exemplar
был создан на основе конструктора Class
. Он унаследовал из своего конструктора свойство prototype
в виде __proto__
(я его затрону ниже), в котором находиться свойство constructor. Внутри этого свойство находиться ссылка на конструктор Class
.
Вернусь к определению первого пункта: Возвращает ссылку на функцию Object, создавшую прототип экземпляра
. Функция Object
, а точнее конструктор создает объект(экземпляр) в первую очередь, а потом ему присваивается уже prototype конструктора в виде __proto__
. Просто в определении ставят акцент на том, что конструктор создает только прототип экземпляра, а не экземпляр в частности.
Во втором пункте я не понял ...экземпляры данного конкретного объекта.
Не пойму о каком объекте идет речь, так как Object является функцией - конструктором. Я знаю что конструкторы Array
, Object
, Function
создают разные сущности, а точнее Array
- массив, Object
- объект, Function
- функцию и все они являются объектами кроме примитивов, но только если они не созданы через свои конструкторы Number
, String
и тд.
P.S: Свойство constructor содержит ссылку на функцию, которая создает экземпляры данного конкретного объекта
. Если это определение писалась на основе какого - то объекта, то вроде все понятно. К примеру есть объект exemplar
из примера выше и его класс Class
, а теперь разбираем определение в контексте этого экземпляра: Свойство constructor(exemplar.__proto__.constructor) содержит ссылку на функцию(Class), которая создает экземпляры данного конкретного объекта(exemplar)
Свойство prototype
.
Object.prototype
представляет объект прототипа Object
.В первом пункте словосочетание: ...представляет объект прототипа Object
мне не понятно. В моем понимаю это должно звучать как: Свойство Object.prototype
предназначено для предоставления базового функционала экземплярам класса Object
.
Во втором пункте мне не понятна формулировка: ...прототип класса объектов
. По моему она должна звучать как: Возвращает ссылку на прототип экземпляров класса Object
. Так же мне не понятно словосочетание ...классу объектов
. Уместней было перефразировать в: Свойство prototype используется для предоставления базового набора функциональных возможностей экземплярам конкретного класса
.
Итог.
Свойство prototype
предназначено для предоставления базового функционала экземплярам класса. Оно используется в функциях - конструкторах(классах) по причине того, что при вызове конструктора через оператор new
, экземпляр унаследует свойство prototype
в виде свойства __proto__
которое является прототипом. Это сделано для того, что бы все экземпляры которые могут отличаться от друг друга, могли иметь общие свойства, которые характерны этому классу.
Свойство constructor
является членом свойства prototype
(prototype.constructor
). В нем находиться ссылка на класс, который создает экземпляры. К примеру у нас есть функция - конструктор(класс) Class
и его экземпляр exemplar
, который унаследовал свойство prototype
в виде __proto__
. Внутри прототипа находиться свойство constructor
которое будет указывать на класс Class
который создал это экземпляр.
Я бы хотел что бы вы мне пояснили на сколько правильно я понял эти два свойства. Хотелось бы еще, что бы вы мне помогли понять смысл терминов, которые я привел выше из сайтов Мозили и Майкрософт, а то мне не очень понятно их трактовка.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу собрать мои скрипты и подключаемые библиотеки в один js файл с помощью gulpПодскажите
Как на javascript получить пинг определенного сервера в браузере? Пробовал через XMLHttpRequest - выдает ошибку 'No-Acces-Allow-Origin' или 'No HTTPS Connection'
Доброе время суток господа, возник такой вопрос: Есть php SphinxClient Есть вот такой запрос который идеально отрабатывает:
Хочу зайти в свой профиль, но не нашел кнопки выхода из этого профиля