Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932

Object.prototype.b

05.03.2011, 17:49. Показов 1715. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По умолчанию в прототипе функции Object (кстати, так можно эти функции называть классами или конструкторами?) не содержится никаких свойств и методов, и после такого кода:
JavaScript
1
2
b={}
a.b()
в консоли появляется ошибка. Но судя по моей логике этого не должно было произойти по следующей причине: при вызове функции a.b интерпритатор смотрит, содержит ли объект a метод b (кстати говоря, можно ли сказать, что объект имеет метод, если этот метод описан в прототипе функции-конструктора, вызовом которой он был создан?), далее он обнаруживает, что объект a данного метода не содержит и смотрит в объекте Object.prototype (который в свою очередь был создан с помощью инструкции new Object), в нем интерпритатор так же не обнаруживает этого метода, после этого он смотрит в прототипе прототипа (кстати, можно ли сказать, что Object.prototype - прототип объекта a? ), то есть в том же Object.prototype, и все должно повторяться бесконечно Может, браузер проверяет, повторяется ли прототип?))

Добавлено через 2 минуты

Не по теме:

Переименуйте тему, пожалуйста, в "Object.prototype.b" :rofl:

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2011, 17:49
Ответы с готовыми решениями:

Object.prototype.method
Всем привет! объясните пожалуйста, есть функция конструктор "myObject": function myObject () { }; myObject.prototype.on =...

Как вывести [object object] в консоле выводит так:
Array(1) 0: ID: "1" OPPORTUNITY: "1900.00" UF_CRM_1556699712: "49" UF_CRM_1556699760: "22" UF_CRM_1556699777: "911909553854" ...

Динамическое добавление Object в существующий Object
Всем привет, вопрос таков, допустим у нас есть объект // некий объект var obj = { sid : "32423j4k2j4k2424d34", ...

4
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,205
Записей в блоге: 24
06.03.2011, 02:32
Вообще-то, a.b -> undefined в твоем примере, потому что a не содержит b непосредственно, прототип а совпадает с Object.prototype, если Object был конструктором a; в свою очередь, Object.prototype также не содержит b непосредственно, а его прототип нулевой (null), поэтому возвратит undefined.

Обрати внимание на такой факт:
Object.[[prototype]]==Object.prototype и этот объект (в наивном смысле) не является экземпляром Object. Данный объект равен null. В этом смысле он порожден Null (хотя можно сказать, что это вообще необъектное значение, и хрен кто разберет там, где обёртки, где не объекты)
В цепи прототипов, подобно списочным конструкциям, маркер конца необходим, если же мы не хотим допустить возможность появления бесконечных списков.

Лирическое отступление: если список таков, что последующий элемент однозначно определяется предыдущим и набор различных элементов списка (т.е. множество А из опр. Хоара по ссылке выше) конечен, то бесконечность эквивалентна зацикленности. Вместе с тем, невозможна ситуация, когда на конечном наборе объектов с терминальным элементом (в нашем случае это null, эквивалент NIL из опр. Хоара, см. ссылку) реализуется бесконечный список. Эти два утверждения гарантируют, что используемая нами модель работоспособна в реальных условиях, если прототип Object (как первооснова всех объектов) есть null.
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
06.03.2011, 11:31  [ТС]
Mysterious Light, спасибо, но понял я не очень много Вот в чем сама проблема:
JavaScript
1
alert(Object.prototype.constructor.prototype.constructor.prototype.constructor)
Этот код выдает функцию Object.
Хм.... Что-то начинает проясняться. Данный код:
JavaScript
1
2
3
4
5
6
function b() {}
b.prototype.d={}
function c() {}
a=new b()
a.constructor=c
alert([a.d, a.constructor])
выдает объект, функция c, значит, прототип смотрится не по конструктору. В смысле когда интерпритатор не находит свойства d в объекте a, то смотрит не в прототипе присвоенного конструктора a.constructor.prototype.d, а в настоящем конструкторе. Но все-таки не думаю, что это как-то связано
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,205
Записей в блоге: 24
06.03.2011, 15:15
Hagrael, я в большинстве своих рассуждений опираюсь на http://javascript.ru/ecma, как на авторитетный источник, не имеющий разногласий с реальностью.

В предыдущем посте я опирался на http://javascript.ru/ecma/part15#a-15.2, однако, несколько неправильно трактовал то, что там написано. А именно (проверяю в FF):
JavaScript
1
2
alert({}.__proto__); // [object Object]
alert({}.__proto__.__proto__); // null
Первая строка как раз объясняет Ваш первый пример; вторая строка утверждает то, что я пытался объяснить постом выше.

Второй же Ваш код объясняется в принципе прототипного наследования в JS: http://javascript.ru/ecma/part13#a-13.2.2
Обрати внимание: прототип объекта ([[prototype]], в FF это эквивалент __proto__) устанавливается равным свойству prototype (кстати, свойство prototype может отличатся от прототипа [[prototype]]) конструктора. Изменение свойства constructor (кстати, полный путь к нему a.constructor, а не a.__proto__.constructor) не влечет за собой изменение прототипа a (ведь мы-то не меняем a.__proto__.constructor), поэтому по-прежнему a.__proto__ == b.prototype.
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
06.03.2011, 18:08  [ТС]
Mysterious Light, ну я понял, в общем, у прототипов своих прототипов не может быть А вообще мне надо бы спецификацию почитать и в правду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2011, 18:08
Помогаю со студенческими работами здесь

C.prototype.constructor = C
Привет. Код function A() { this.Name = 'Class A' } A.prototype.PrintName = function () { alert(this.Name); }

использование prototype
Доброй ночи! Помогите, пожалуйста, разобраться. Есть пример кода: function array_max(){ var i, max = this; for (i =...

Javascript prototype
Вообщем, смотрим код ниже. function EsObject(_data){ var data = $.extend(true, {}, _data), SelfObj = this; this.set =...

prototype.slice.call()
Наткнулся на такую конструкцию: "чтобы вызвать другую функцию с теми же аргументами, но кроме первого, можно создать из arguments...

HTMLElement.prototype.YourMethod в Safari
Hi 2 all Vopros, vozmojno kakto podtzepiti etot interface v Safari? To esti, dobaviti novii method kak v mozilla: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru