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

Сообщение от Zeroglif
Ты почитай, как евангелист пиарит
Ага, полистаю.

Сообщение от Zeroglif
alert( (obj.m)() ); //-> object
alert( (obj.m = obj.m)() ); //-> global
Да, я подробней покажу, всем остальным, кому интересно:

Сообщение от 11.1.6 The Grouping Operator
NOTE
This algorithm does not apply GetValue to Result(1). The principal motivation for this is so that
operators such as delete and typeof may be applied to parenthesised expressions.
Поэтому, в первом случае после оператора группировки, у нас всё ещё Reference Type, а во втором случае, оператор присваивания (как и другие - "ИЛИ", или "запятая"), вызовет для AssignmentExpression GetValue, который, вызвав в свою очередь [[Get]], вернёт уже значение свойства, т.е. функцию, и будет уже не тип Reference. Для выражения вызова, это означает использовать Global в качестве this-value.

Сообщение от 11.13.1 Simple Assignment ( = )
2. Evaluate AssignmentExpression.
3. Call GetValue(Result(2)).
Сообщение от Octane
Всегда смущало, что вместо context многие пишут scope — это же не правильно?
С точки зрения Scope и [[Scope]] в ES (и основной точки зрения - понимания этих сущностей) - конечно, это неправильно. Этим, кстати, грешит фреймворк ExtJS, который везде для handler-ов событий указывает вторым параметром - scope: this, имея в виду thisValue.
__________________
Тонкости ECMAScript

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