Показать сообщение отдельно
  #17 (permalink)  
Старый 06.11.2009, 17:18
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
На выходе будет значение переменной, т.к. это экспрешн стэйтмент. Ты если про алерт пишешь, то вытаскивать выражение из вызова алерта нельзя, иначе получим значение.
Ай, не доглядел, действительно:

Сообщение от ECMA-262-3 12.4. Expression Statement
1. Evaluate Expression.
2. Call GetValue(Result(1)).
Но, я хотел показать основную идею - промежуточного значения типа Reference; пример ошибочный был, да.

В alert-e всё ещё Reference Type, и только потом будет получено значение.

Сообщение от Zeroglif
Точнее ожидает объект, ещё точнее ожидает callable объект, иначе ошибка. Какое именно выражение стоит слева и будет ли оно вычислено в значение Reference Type это как бы важно только с точки зрения 'this'.
Ну да, если более точно, то так, конечно.

Сообщение от Zeroglif
Неа, резолвится левая часть и то, если там идентификатор только.
Да, и вправду, тоже ошибся. Только PrimaryExpression : Identifier резолвится.

А MemberExpression . Identifier, вычисляется по своему алгоритму, где будет отрезолвен MemberExpression (на этапе PrimaryExpression : Identifier), получено его значение, получено значение Identifier, которое эквивалентно <identifier-string>, и возвращено новое значение типа Reference c базой ToObject(значение MemberExpression) и именем свойства ToString(значение Identifier).

Спасибо, что поправил Это важные замечания.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 06.11.2009 в 20:14.
Ответить с цитированием