Что такое {}.prototype?

Часто вижу запись навроде… = {}.prototype =… А что это такое и как его можно использовать, не нашел. Подскажите пожалуйста?
  • Вопрос задан
  • 4636 просмотров
Решения вопроса 1
Не правильно. Во-первых, torbasow не прав, {}.prototype — не SyntaxError. Такая ошибка вызывается из-за того, что интерпритатор ставит после законченной конструкции {} точку с запятой и получается следующее:
{};.prototype что и выдает такой результат.

Если же написать так:
var o = {}; o.prototype;
то, как уже было замечено, это вернет нам undefined.

Далее, по поводу присваивания
user = {}.prototype = root
видимо вы не в курсе, что операция присваивания имеет приоритет справа налево, то есть сперва выполняется правый операнд, затем тот, что левее и так далее, пока дело не дойдет до самого левого. Пример:
var3 = 10; var var1 = var2 = (var3 + 1); console.log('1: '+var1); console.log('2: '+var2);
выведет
1: 11
2: 11
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
@Power
{}.prototype, в общем случае, равно undefined и смысла в нём мало. (не путать с Object.prototype)
Покажите, где вы такое видели.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Это большая тема. Одно из лучших объяснений, имхо.
Ответ написан
Комментировать
@platedz Автор вопроса
Честно говоря, я считал что, {}.prototype и Object.prototype, одно и тоже, как и Array.prototype и [].prototype. Буду признателен за пояснение.
Ответ написан
RUVATA
@RUVATA
Разработчик, гик, меломан, разгильдяй
уже хотелось бы как-то на практике все это закрепить, чтобы не забылось, но пробелы в знаниях не позволяют реализовать задуманное.

Отличный способ попрактиковаться — зарядившись свежей порцией знаний полученной из книг и примеров, засеть на каком ни будь форуме, того же javascript.ru, и следить за вопросами, пытаться найти на них ответ, причем воплотив его в работающий код с всеми возможными теоретическими пояснениями, так как туда люди идут как раз с «граблями» и «неочевидностями», «скилл» прокачивается очень хорошо, не редкость, что там таки и удается пощупать нечто реальное, с вполне себе понятным «юз кейсом».
Ну и собственно никто не отменял такой способ практики как «велосипедостроение», т.е. откажитесь от некоего готового решения и попробуйте реализовать необходимый от него функционал самостоятельно, а после взгляните на исходники готового решения и после разбирайтесь — почему у Вас не так :) (очень доставляет) например — попробуйте отказаться от jQuery для выполнения чего-то небольшого, но прогоните по всем браузерам, — экскурс по внутренней кухне браузеров Вам обеспечен, а с ним и много кода на JavaScript. Чувствуете неуверенность в понимании асинхронного стиля программирования — попробуйте поиграться с Node.JS — хапните асинхронности в самом чистом ее проявлении.
PS: Еще именно для практики — очень полезно писать тесты, опять же желательно без привлечения сторонних решений, уж поверьте мне код тестов очень редко бывает меньше кода самого приложения :), я обычно делаю так когда текущих задач связаных с JavaScript не стоит, а «нога» (в смысле мой JavaScript) уж больно затекла. Беру что ни будь старенькое и давай обкладывать тестами… (И кода напишу много, и глядишь найду проблемы какие, что-то перепишу). Вот.
Ответ написан
Комментировать
AMar4enko
@AMar4enko
Могу ошибаться, но судя по всему это глобальное определение прототипа для Object.
Т.е. впоследствии при создании любого объекта для него будут доступны методы, определенные через prototype.
Вы можете в любой момент добавить объекту метод. А через прототип вы добавляете его всем экземплярам Object сразу.
Ответ написан
Комментировать
@platedz Автор вопроса
Большое спасибо за ответы.

Object -> Object.prototype
Function -> Function.prototype -> Object.prototype

Т.е. Object.prototype является своего рода родителем всех объектов (к которым в том числе относятся и функции), как предопределенных, так и нет. Сначала свойства и методы ищутся у самого объекта, а потом по порядку у всех его прототипов, в том числе пока не дойдут до Object.prototype.

Правильно я понимаю?

Предполагаю даже, что конструкторы создаются именно за счет того, что в Function.prototype содержатся все необходимые для этого методы и свойства. И если я прав, то было бы не лишним узнать какие именно.

Также здесь описано, что можно переопределить свойство Object.prototype. И насколько я понимаю, то же самое можно сделать и для свойств других предопределенных объектов. Не ясно только, как это все происходит, т.е. как мне назначить скажем новое свойство или метод, а самое главное, проверить и посмотреть (убедиться), что все получилось.
Ответ написан
@platedz Автор вопроса
А также не ясно, что если мне нужно установить не ссылку на объект, а просто скопировать объект, а затем дополнить ее новыми свойствами, т.е. если я хочу чтобы admin, получил свойства и методы root. Но при этом дальнейшее изменении свойств и методов или добавление их не влияло на root. А также изменения свойств root, не влияла на свойства объекта admin.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы