23.03.2009, 15:37
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
хитросплетения Global,контекст,this,Reference
Не въезжаю в стандарт, может кто поможет:
Вот почему так получается :
function al(o){document.write(o,'<br>')} // для html
function al(o){WScript.Echo(o)} ; // для WSH
for (var x in this) al([[x]]) // Здесь Ошибка после распечатки первого значения свойства Глобального объекта (или this, не знаю - совпадут ли они ...)
// Ошибка выполнения Microsoft JScript: Предполагается наличие объекта
(function qq() {})(); // - вызывает ошибку в for in см выше, если строчку закоментировать, или сделать так v=(function qq() {})() , то ошибки нет !
// даже так (function qq() {return {}})() , т.е. вроде как я возвращаю обхект в качестве свойства, но все равно возникает та же ошибка в for in выше
(1); // - та же ошибка в for in
1 ;// - не вызывает ошибки, т.е. вроде как свойствами глобального объекта могут быть примитивные значения . а не только объекты ?!
Если кто понимает хитросплетения Global,контекст,this,Reference ( в стандарте) , объясните, плз, понятными словами , я пока никак не могу въехать.
Последний раз редактировалось kefi, 23.03.2009 в 16:08.
|
|
23.03.2009, 18:40
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Точку с запятой надо ставить после al([[x]]).
пысы: "Хитросплетения Global,контекст,this,Reference" понимаю, но желательно получить более конкретный вопрос.
|
|
23.03.2009, 20:10
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
2 Zeroglif > на точку с зпт я - то и не подумал. В этом-то собствно и была причина непоняток.
Вот правда еще есть - ведь все реализации обязаны делать расширяемыми свойства всех своих объектов в том числе и объектов среды типа WScript? Или я не правильно понимаю? Но MS почему-то сделал this.WScript не могущим добавлять новые /переопределять существующие свойства у этог объекта. Как такое понимать ?
|
|
23.03.2009, 21:53
|
...
|
|
Регистрация: 09.03.2008
Сообщений: 216
|
|
Сообщение от kefi
|
все реализации обязаны делать расширяемыми свойства всех своих объектов
|
Не обязаны.
|
|
24.03.2009, 16:43
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Вот еще вопрос :
function al(o){document.write(o,'<br>')} ;
for (var x in this) {al([[x]]) } ; // здесь будет function Person() { al("qqq") } ;
function Person() { al("zxc") } ;
///*
var Person = function () {al("123")};
// */
function Person() { al("qqq") } ;
al(Person) ; // Здесь распечатается function () {al("123")}
Person() ; // 123 здесь вызовется, соответствующая var Person=function
Почему глобальный объект получает в качестве свойства Person то , которое в строке function Person() ... , а не которое в строке
var Person = function ... ?
Последний раз редактировалось kefi, 24.03.2009 в 17:16.
|
|
24.03.2009, 17:06
|
-
|
|
Регистрация: 16.07.2008
Сообщений: 207
|
|
потому что вы переопределили Person, т.е. объявили еще раз эту функцию, но другим способом.
|
|
24.03.2009, 17:11
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
twolf,
я тоже так подумал сперва.но это не так.
как вы объясните такой код, тогда
function al(o){document.write(o,'<br>')} ;
al(Person) ;
var Person = function () {al("123")};
function Person() { al("zxc") } ;
al(Person) ;
как видите второй вывод показываете первую функцию, а первый вывод показывает вторую функцию
но с первым выводом понятно.он показывает именованную функцию, поэтому успешно срабатвает до ее определения.
PS я так подозреваю, что сперва в глобальную область видимости пихаются именованные функции, и лиш затем по порядку анонимные.в свете такой теории, становится понятно почему эти два примера так работают
Последний раз редактировалось Gvozd, 24.03.2009 в 17:14.
|
|
24.03.2009, 17:17
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
2 twolf ,Gvozd> Да я подправил предыдущий пост
|
|
24.03.2009, 17:19
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
походу мои измышления верны только для общего контекста
то есть достаточно обернуть любой из кодов выше просто в фигурные скобочки, для смены контекста, и уже будет работать нормальная логика, с переопределением
все, что я сейчас написал было результатом моих размышлений, а не точным знанием
|
|
24.03.2009, 17:19
|
Кандидат Javascript-наук
|
|
Регистрация: 12.03.2009
Сообщений: 148
|
|
Цитата:
|
PS я так подозреваю, что сперва в глобальную область видимости пихаются именованные функции, и лиш затем по порядку анонимные.в свете такой теории, становится понятно почему эти два примера так работают
|
Так а разве var Person=function ... не есть определение именованной , ей же присваивается имя ?!
|
|
|
|