Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции и методы в JS, детали реализации, обсуждение ECMA и дру 
:(
    Опции темы
Zeroglif
Дата 20.2.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Sardar @  20.2.2007,  16:54 Найти цитируемый пост)
В примере функция потеряна. Для ясности, имя функции должно давать доступ до функции или как нибудь функционально проявляться, а не просто тешить нас мыслью, что в каком то из пропертей обьекта-функции записано "имя".

В принципе, согласен с тем, что ты подразумеваешь. Что переменная (один идентификатор), что и имя функции (второй идентификатор) - оба превратятся в имена свойств некого объекта. Нет жёсткой привязки к функции. В этом принципиальном смысле их судьба похожа. Но это всё равно не отменяет факт существования особенностей конкретно именованных функций, главная из которых - позиция функции в коде плюс наличие имени разделяют декларацию от выражения. Или вот, вспомнилось, что у gecko можно имена функций высматривать без сорцов:
Код

function A() {
    alert('Вызван:\n' +
          '\nКто - ' + arguments.callee.name +
          '\nКем - ' + arguments.callee.caller.name
    );
}

function B() {A()}

var C = function() {A()}

B(); //-> Кто - A, Кем - B
C(); //-> Кто - A, Кем - пусто


Цитата(Sardar @  20.2.2007,  16:54 Найти цитируемый пост)
А это что за механизм "не явного создания метода"?

Ну как же, переменные, объявленные функции и формальные параметры становятся свойствами Variable Object, мы же не явно заводим эти свойства (методы).

Добавлено @ 21:24 
Цитата(AKS @  20.2.2007,  19:56 Найти цитируемый пост)
 скобки вокруг функции A называются оператором группировки (11.1.6 The Grouping Operator)?

Ну да.
PM MAIL WWW   Вверх
Sardar
Дата 20.2.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Zeroglif @  20.2.2007,  20:16 Найти цитируемый пост)
главная из которых - позиция функции в коде плюс наличие имени разделяют декларацию от выражения.

На встречу, а на сколько удобно/функционально эта фича для тебя? Не хотел бы иметь просто FunctionExpression везде, при этом если функция имеет имя, то она автоматом видна по имени выше/ниже в коде (создаётся вторая переменная). А если имени нет, то соответственно функция доступна только по переменной, которой присвоили значение функции. Чем была вызвана необходимость этой ремарки в ECMA?

Цитата(Zeroglif @  20.2.2007,  20:16 Найти цитируемый пост)
Ну как же, переменные, объявленные функции и формальные параметры становятся свойствами Variable Object

Только у global так, у остальных объявленные функции/переменные не становятся свойствами объекта (т.е. доступные через this). Или говорим о разных вещах? Покажи кодом.


P.S. поднапрягусь, перепишу текст чуть позже. Но вот топ "Методы" в Wiki меня смущает, интересно что подразумевал автор туда положить...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Zeroglif
Дата 21.2.2007, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Sardar @  20.2.2007,  22:28 Найти цитируемый пост)
На встречу, а на сколько удобно/функционально эта фича для тебя?

Мне пофиг, я идентификаторами мыслю. FunctionExpression везде наверное было бы проще, без имён ещё проще.

Цитата(Sardar @  20.2.2007,  22:28 Найти цитируемый пост)
Чем была вызвана необходимость этой ремарки в ECMA?

Кто ж знает. Изначально была классическая функция с именем и запретом вложений. Потом понеслось.

Цитата(Sardar @  20.2.2007,  22:28 Найти цитируемый пост)
Только у global так, у остальных объявленные функции/переменные не становятся свойствами объекта (т.е. доступные через this). Или говорим о разных вещах? Покажи кодом.

Они становятся свойствами/методами Variable Object (это чётко прописанный алгоритм), без этого просто невозможно будет побегать по scope chain в поисках некого идентификатора, опрашиваются ведь именно свойства. Что касается this value, то при вызове определяется, кто "владелец" метода, если это Activation Object (Variable Object в контексте функций), то этот объект не передаётся в this, вместо него туда уходит null, вот цитата: "If Result(6) is an activation object, Result(7) is null". 

Что касается "покажи кодом", то в отношении Activation Object это невозможно, т.к., повторяю, в this пойдёт null, но могу предложить код, где нет глобального контекста, но есть логичное this value (gecko only):
Код

function A(){
    return function B(){return (this==window) ? B : this}()();
}

var O = A(); // спецобъект
alert(O.B);   // а вот и его метод B


PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.