Свойство не может быть ссылкой или объектом. Значение свойства может быть примитивным значением (необернутые числа, строки) или ссылкой на объект.
Вам не кажется что вы придираетесь к формулировкам???
Здесь вообще ересь написана. Это не добавление свойств в прототип, а замещение прототипа новым объектом. И в первую очередь нужно объяснить, что {} создаёт объект, и что x = { a: 5 }; это то же самое, что x = new Object(); x.a = 5; и так далее по всему тексту такие ляпы, которые на самом деле только запутывают.
Цытата из статьи:«Во-вторых обычное присвоение переменной объекта, типа: var a = {}, интерпретатором на самом деле выполняется как var a = new Object(). А это значит, что свойство prototype функции-конструктора теперь содержит совершенно новый объект»
«То есть в отличии от Примера1 здесь мы не «добавили в хранилище свойство» и даже не «переписали хранилище заново», мы просто создали новое, разорвав связь с старым»
Скорее всего вы просто не дочитали статью и не потрудились понять… Дочитывайте статью полностью, а потом пишите гневные сообщения!
Ну не все сразу Уважаемый, я так же сказал что это цикл статей. Я кончено мог в одной статье расшифровать все термины стразу, но это была бы книга а не статья. Постепенно я буду раскрывать суть терминов. И про кучи поговорим, и про области видимости и про то чем отличается var a=2 от a=2. Терпение!
Вы знаете я например не очень люблю придираться настолько к словам. Тем более в вашем случае я вообще не понимаю что вам не понравилось.
«А перменная или свойство объекта связывается с положенным в кучу объектом.»
Я не о каких свойствах объекта в указанном вами отрывке не говорил. А если вам интересно, то переменные хранятся в так называемом «объекте переменных» (Variable object, сокращённо VO) – это объект имеющий связь с контекстом исполнения. Он хранит в себе например:
— переменные (var);
— декларации функций (FunctionDeclaration, сокращённо FD);
— и формальные параметры функции,
объявленных в данном контексте.
Вы наверно не совсем поняли меня.Под «матрёшкой» Object(Number(x)) я не имел ввиду стек вызовов, я имел ввиду абстрактное представление примитива в случае обращения к нему как к объекту. Ну мол если с числом 5 будут обращаться как с объектом, то оно временно преобразуется(обернется) в объект при помощи new Number(5), а Number в свою очередь имеет в родителях Object. Именно данную иерархию наследования я пока и назвал «матрёшкой» и попытался отобразить в такой записи Object(Number(x), но это конечно не стек вызовов.
Такого бреда не будет, как вы написали. Если вы в консоли напишете b = new Number(2) а потом b.__proto__ то увидите, что b «унаследовано» от Number. Если продолжите и напишете b.__proto__.__proto__, то узнаете что Number унаследовано от Object. И если уж совсем не лень написать b.__proto__.__proto__.__proto__, то узнаете что Object не имеет наследников, он произведен от null. А что вы за бред написали я не знаю.
Ну продолжать мне или нет я сам как-то решу(Могу лишь вам посоветовать читать или нет). А с чего вы взяли это: «Object(Object(Object(...(Object(Number(x))...)))» я не знаю. действительно бред.
Очень неприятно что у вас сложилось обо мне такое мнение что я, извольте, ментор. Я ещё очень много не знаю и надеялся, что комментарии здесь будут в стиле советов, а не нравоучений и что я и сам после написания ещё что-то новое узнаю. Но к сожалению сложилось мнение что большинство хабролюдей считают, что коль ты выложил здесь статью то должен знать абсолютно все, а если где-то пропустил, то не совет тебе а минус)) Очень жаль, но тоже опыт!
Делить я никого не хотел, просто понимаю что есть люди которые только синтаксис учат, а есть которые уже и опыт имеют. А угодить хотелось всем. Прочувствовал это, поскольку перед публикацией провел небольшую лекцию по данной теме у себя в фирме и появлялись очень «глупые» вопросы даже на таком уровне абстрагирования в некоторых моментах. Что было бы если бы я сразу начал углубляться — я не знаю, но в статье этого делать не стал.
Я указал в перечне Хабов этой статьи Веб-разработка, что подразумевает, что я пишу о JS в контексте браузера(по крайней мере я так думал). По этому я не стал уточнять тонкости других реализаций. Ну а смысла спора по поводу null и undefined и то как я их описал я не вижу. Концептуальных ошибок я кажется не сделал!
Спасибо за интересный вопрос и сразу же за ответ который не дали мне высказать самостоятельно(а жаль). =)
Вы вероятно поторопились и написали глупость(поскольку instanceof не может равняться object — он возвращает true/false). Возможно вы имели ввиду typeof(null) — но тут причина в том что это значение берется из таблицы как я уже писал в статье.
Тема интнрестная и полезная, не дочитал только по одной причине - все в рублях.
Никакой политики, но ты ж пишешь про ИТ, на ресурсе который международный, ну серьезно?! Ну это ж не Хабаровский форум... (
Loading pusher… widget.min.js:2
Asset pusher(js) is loaded widget.min.js:2
All assets are loaded widget.min.js:2
Authorizing… widget.min.js:2
Fetching comments widget.min.js:2
Authorized: true widget.min.js:2
Fetched 3 comments widget.min.js:2
Uncaught TypeError: Cannot read property 'error' of undefined widget.min.js:3
Chrome Версия 26.0.1410.43 m
Вам не кажется что вы придираетесь к формулировкам???
Здесь вообще ересь написана. Это не добавление свойств в прототип, а замещение прототипа новым объектом. И в первую очередь нужно объяснить, что {} создаёт объект, и что x = { a: 5 }; это то же самое, что x = new Object(); x.a = 5; и так далее по всему тексту такие ляпы, которые на самом деле только запутывают.
Цытата из статьи:«Во-вторых обычное присвоение переменной объекта, типа: var a = {}, интерпретатором на самом деле выполняется как var a = new Object(). А это значит, что свойство prototype функции-конструктора теперь содержит совершенно новый объект»
«То есть в отличии от Примера1 здесь мы не «добавили в хранилище свойство» и даже не «переписали хранилище заново», мы просто создали новое, разорвав связь с старым»
Скорее всего вы просто не дочитали статью и не потрудились понять… Дочитывайте статью полностью, а потом пишите гневные сообщения!
«А перменная или свойство объекта связывается с положенным в кучу объектом.»
Я не о каких свойствах объекта в указанном вами отрывке не говорил. А если вам интересно, то переменные хранятся в так называемом «объекте переменных» (Variable object, сокращённо VO) – это объект имеющий связь с контекстом исполнения. Он хранит в себе например:
— переменные (var);
— декларации функций (FunctionDeclaration, сокращённо FD);
— и формальные параметры функции,
объявленных в данном контексте.
По поводу new в следующей статье
Делить я никого не хотел, просто понимаю что есть люди которые только синтаксис учат, а есть которые уже и опыт имеют. А угодить хотелось всем. Прочувствовал это, поскольку перед публикацией провел небольшую лекцию по данной теме у себя в фирме и появлялись очень «глупые» вопросы даже на таком уровне абстрагирования в некоторых моментах. Что было бы если бы я сразу начал углубляться — я не знаю, но в статье этого делать не стал.
Вы вероятно поторопились и написали глупость(поскольку instanceof не может равняться object — он возвращает true/false). Возможно вы имели ввиду typeof(null) — но тут причина в том что это значение берется из таблицы как я уже писал в статье.