Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.01.2012, 17:31
Интересующийся
Отправить личное сообщение для vandy3 Посмотреть профиль Найти все сообщения от vandy3
 
Регистрация: 28.10.2010
Сообщений: 14

Спецификация Ecma-262. Пункт 8.7.2 PutValue(V,W) не до конца ясен алгоритм.
Здравствуйте.
В пункте 8.7.2 PutValue представлено два алгоритма: один основной, второй, если на шаге 4.a. первого получаем значение HasPrimitiveBase(V) === true - то для назначения свойства используется второй алгоритм.

Как я понимаю, во второй алгоритм мы попадаем, если пытаемся задать свойство объекту, которое у него есть и primitive type (Boolean, String, Number), как указано на предыдущей странице спецификации.

Если свойство можно записать, то мы попадаем на шаг 3. Где получаем Property Descriptor свойства. А так как мы хотим изменить свойство, которое есть у объекта и примитивного типа, то мы и должны, как я полагаю получить data descriptor. Но на следующем шаге, если мы получили data descriptor, то мы вообще либо Exception выкидываем, либо просто выходим из программы не назначая свойства.

По аналогии с предыдущим пунктом спецификации 8.7.1 GetValue, где в пункте 4 второго алгоритма, если это data descriptor, то мы возвращаем значение return desc.[[value]], так же и здесь, наверное, надо назначать свойство через desc.[[value]] = W, а мы выдаем ошибку и выходим.

Так же можете пояснить 1 шаг второго алгоритма, что значит toObject(base). В моем примере, как я понимаю, base это примитивное значение. Допустим было myObj.m = 33, то base будет равно 33, и что в таком случае значит 1. Let Obj be ToObject( 33 ) ?

Можно ещё привести небольшой код, с пояснением, в каком случае эти пункты работают, я так понимаю, когда мы пишем:

var myO = {};
myO.myName = 33;
/*
Здесь вступает в работу пункт 3 первого алгоритма из PutValue, так как свойства несуществует, то IsUnresolveableReference должна дать true, и так как у нас не strict mode, то мы выполняем 3.b

А дальше, если пишем:
*/
myO.myName = 55;
/*
То уже должен вступить пункт 4 в дело, и тут я перестаю понимать, что к чему.
*/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка под слоем перекрывает слой Devider Общие вопросы Javascript 7 24.02.2009 23:18