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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контексты, this, объекты и функции, Флейм на тему ссылок this 
:(
    Опции темы
Zeroglif
Дата 1.3.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sardar,

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

Цитата

Исходя из моего опыта работы с различными языками и считая, что метод характеризуется прежде всего эксклюзивной связью с объектом, я бы сказал, что в javascript методов нет, однако формально стандарт языка использует термин "метод" для вычленения свойств объекта, значением которых является функция (callable object), цитирую:

1) function stored in a property of an object is called a method
2) method is a function associated with an object via a property

Согласен?

Цитата(Sardar @  1.3.2008,  15:50 Найти цитируемый пост)
function test() { }

(test)(); //test - лишь имя для lookup'а, найти callable
(function () {})(); //а тут callable сразу задан
//оба вызова эквивалентны, мы не указываем объекта. "владельца", интерпретатор с ходу ставит global/null

test - это не только имя для lookup-а, наличие имени уже говорит о том, что это Reference type, то есть кроме того, что будет произведён поиск идентификатора (возможно с участием прототипа), для определения значения this будет вычислен base object (владелец свойства). Мы не указываем владельца руками, но владелец в случае с именами реально есть (имена - это свойства какого-либо объекта), владелец будет найден и подставлен в this. Во втором же случае он не будет найден вовсе, но будет подставлен. В первом случае вызов в контексте глобального объекта, во втором вне контекста какого-либо объекта, но без this в js остаться нельзя, принудительно от балды подставляется глобальный объект.

Цитата(Sardar @  1.3.2008,  15:50 Найти цитируемый пост)
object.method() - парсер выделяет кортеж (object, object.method, ())
(object.method)() - парсер выделяет кортеж (global, object.method, ())

Неправильно мыслишь, во втором случае не должно быть global в последовательности, т.к. в js оператор группировки (скобки) может возвращать Reference type, говоря простыми словами, он что есть, что его нет, вызов во втором случае ничем не отличается от первого.


Цитата(Sardar @  1.3.2008,  15:50 Найти цитируемый пост)
Если считать  АО объектом. Только эта вещь не доступна доступна как объект в JS коде, это сущность реализации, а в реализозвать  его можно как угодно. Понятия "метод объекта AO" отсюда теряет смысл. ECMA задаёт подобный термин для формального определения поведения, а есть ли упоминание AO как сущности доступной в JS коде?

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

// проверять в Mz

Object.prototype.m = function () { return this; };

var m = 0, o;

(function () {
    var m = 1;
    (function f() {
        o = m();
    })();
})();

alert(o.f); // Sardar, кто этот 'o' и почему у него есть метод 'f' ?


Цитата(Sardar @  1.3.2008,  15:50 Найти цитируемый пост)
пиши в PM

В следующий раз увеличу количество смайликов в 2 раза. Писать буду туда же, куда и ты...  И вообще выдохни, модерируешь ты на уровне, знаний и у тебя полно, репутация заоблачная, ничего покидать не надо, вопросов даже таких не возникает, не парься и продолжай доказывать свою правоту...  smile

Добавлено @ 17:13
AKS, замыкания в js вещь спорная, можно считать, что все функции замыкания, можно считать иначе, вплоть до того, что их нет вообще. Формального определения нема, каждый ратует за свою концепцию. По-моему я это уже здесь писал как-то, на мой взгляд считать все функции подряд замыканием просто не вкусно, нет акцента, более идейно, когда замыкание характеризуются 2-мя признаками:
 
1) функция пережила контекст исполнения, в котором она была создана;
2) функция имеет на борту "свободные" переменные;

Под "переменными" подразумевается понятно что. В этом случае замыкание взведено и готово к работе.  smile 

Это сообщение отредактировал(а) Zeroglif - 17.3.2008, 16:26
PM MAIL WWW   Вверх
AKS
Дата 1.3.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

Репутация: 27
Всего: 52



Цитата(Zeroglif @  1.3.2008,  17:00 Найти цитируемый пост)
AKS, замыкания в js вещь спорная, можно считать, что все функции замыкания, можно считать иначе, вплоть до того, что их нет вообще.

Наверно не такая уж спорная. Но, как бы то ни было, мне понятно ваше определение, и никакое другое (видел всякое уже).
У меня же к Sardar’у немного другие вопросы. Он cначала писал: "ECMA разделяет декларации функций и функции-closure как значения". Тут сразу возник вопрос – если выделен термин FunctionDeclaration, то он не может ассоциироваться с closure? Или все-таки может? А во втором случае вопрос немного иной – если созадется FunctionExpression, обязательно будет формироваться closure? Или нет? Затем Sardar уже заявил, что "все функции closures, даже если не используют контекст". 
Думаю, что надо избавляться от непоследовательности и двусмысленности. Пусть определится и все.

Кстати, что с вызовом функции в контексте объекта? Как быть? Sardar’у уже устал, а я не могу нигде ничего подобного найти в контексте ES. Давайте уж Вы, что ли, такое же определение, как и с closure.


PM MAIL   Вверх
ksnk
Дата 1.3.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Давайте будем материалистами ;-) Материалисты познают мир методом научного тыка. Если методом научного тыка не удается увидеть разницы между closures и обычной функцией, то нечего и огород ородить, поминая библию (ES документацию) и высказывания апостолов ...  smile 

Вообще, насчет материализьма... Мне видится, что замыкания - это магия, причем совсем даже не белая... Как бы функция пожила себе, породила деток, закончила свое существование, а тут ее поднимают с того света и давай ее труп использовать в совсем даже странных обстоятельствах... В общем - зомбизьм и некромантия чистейшего толка...  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sardar
Дата 1.3.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(Zeroglif @  1.3.2008,  16:00 Найти цитируемый пост)
Согласен?

Только в этом разделе и только говоря о JS - да smile

Цитата(Zeroglif @  1.3.2008,  16:00 Найти цитируемый пост)
Неправильно мыслишь, во втором случае не должно быть global в последовательности, т.к. в js оператор группировки (скобки) может возвращать Reference type, говоря простыми словами, он что есть, что его нет, вызов во втором случае ничем не отличается от первого.

Проверил, действительно так. Года 3 назад писал интерпретатор JS на Java, вот тут бы моя реализация тест бы и не прошла  smile 

Вывод: (object.method) - действительно отдаёт не просто callable, а кортеж (object, callable) (ECMA Reference type?), достаточно что бы верно вызвать функцию как метод. Похоже переменная не может содержать такой тип, поэтому присвоение выберет только callable.

Код
function test() {
   alert(this.val);
}

var a = {bla: test, val:90};

a.bla(); //90
(a.bla)(); //вот тут не проверил, оказалось действительно связь с объектом сохранилась

var b = a.bla; //а вот тут уже потерялась
//это верно и при отдаче выражения в аргументы, именно поэтому setTimeout() требует function() { obj.meth(); }

b(); //undefined
(b)();

Вообще это хорошо, т.к. иначе можно было присвоить совершенно чужой метод левому объекту, тогда obj.method могло выдать (object1, (object2, callable)). Тут у интерпретатора три пути, либо кинуть ошибку, мол ожидалось callable; либо отбросить object2 (поведение идентичное нынешнему), либо отбросить object1 (что совсем не верно, вызов метода на одном объекте возбудит вызов метода на совершенно левом объекте).

Цитата(Zeroglif @  1.3.2008,  16:00 Найти цитируемый пост)
то я тебе приведу другой пример, попробуй его разгадать:

*****! браво smile
Жаль пример только для мозиллы, ни Опера, ни ИЕ не будут искать m в прототипе объекта. Интересно, задано ли это поведение в ECMA или свободная интерпретация мозилловцев...  В любом случае действительно в мозилле найдём и запустим m(), да на this == AO, содержащим функцию f как поле .f (метод). Теперь буду думать как это эффективно реализовать, а то млин ссылок много)

Цитата(Zeroglif @  1.3.2008,  16:00 Найти цитируемый пост)
более идейно, когда замыкание характеризуются 2-мя признаками

По идее первого условия уже достаточно.

Добавлено @ 19:04
Цитата(ksnk @  1.3.2008,  17:44 Найти цитируемый пост)
В общем - зомбизьм и некромантия чистейшего толка...

Жутко удобно в разного рода итераторах. Посмотри как в Ruby к примеру в базу запрос сделать и пробежаться по всем строкам. Кратко, локально, элегантно.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



Пара вопросов по замыканиям:

Цитата(Zeroglif @  1.3.2008,  00:17 Найти цитируемый пост)
// не замыкание
var a = function (x) {
    return function (y) {
        return y;
    };
}(60)(40);
// замыкание
var b = function (x) {
    return function (y) {
        return x + y;
    };
}(60)(40);


При замыкании контекст "родительской" функции продолжает "жить", т.к. есть ссылки на объекты (переменные) контекста. Вопрос 1: весь ли контекст продолжает жить или только тот, который использовался в замыкании (мне думается, что весь)? Вопрос 2: если первый случай в примере не замыкание, то контекст "родительской функции" будет удален по выходу, да? 


Цитата(Zeroglif @  1.3.2008,  17:00 Найти цитируемый пост)
более идейно, когда замыкание характеризуются 2-мя признаками:

1) функция пережила контекст исполнения, в котором она была создана;
2) функция имеет на борту "свободные" переменные;


можно пояснить второй пункт? я не понял, кто такие "свободные" переменные =)


Цитата(AKS @  1.3.2008,  18:21 Найти цитируемый пост)
если выделен термин FunctionDeclaration, то он не может ассоциироваться с closure? Или все-таки может?


если под FunctionDeclaration подразумевается function f() {...}, то почему нет?

Код

function f() {
  var b = 'test';
  return function a() {alert(b);};
}
var d = f();
d();


Цитата(ksnk @  1.3.2008,  18:44 Найти цитируемый пост)
а тут ее поднимают с того света и давай ее труп использовать в совсем даже странных обстоятельствах... В общем - зомбизьм и некромантия чистейшего толка...

 smile 


Это сообщение отредактировал(а) dsCode - 1.3.2008, 19:09


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
AKS
Дата 1.3.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

Репутация: 27
Всего: 52



Цитата(ksnk @  1.3.2008,  18:44 Найти цитируемый пост)
Если методом научного тыка не удается увидеть разницы между closures и обычной функцией, то нечего и огород ородить,

Это тоже самое, что у Zeroglif'а, только из уст "материалиста".

Цитата(ksnk @  1.3.2008,  18:44 Найти цитируемый пост)
...поминая библию (ES документацию)

Так вот там и нет, как назло, ничего об этом.



Цитата(Sardar @  1.3.2008,  19:01 Найти цитируемый пост)
Похоже переменная не может содержать такой тип, поэтому присвоение выберет только callable.

Цитата

8.7 The Reference Type
The internal Reference type is not a language data type.
...
However, a value of type Reference is used only as an intermediate result of expression
evaluation and cannot be stored as the value of a variable or property.

Вот и все.

Цитата(Sardar @  1.3.2008,  19:01 Найти цитируемый пост)
Интересно, задано ли это поведение в ECMA или свободная интерпретация мозилловцев...

Задано. Только Вы не разгадали. Объяснения – за Zeroglif'ом, как за автором. А я предложу вообще чисто мозилловский вариант на ту же самую тему – может поможет разгадать загадку Zeroglif'а (интересно, а он на меня не разозлится, что я подсказываю smile ):
Код

(function () {
    alert(arguments.callee.__parent__); // => object Window
}());

(function f() {
    alert(arguments.callee.__parent__); // => object Object
}());




Цитата(dsCode @  1.3.2008,  19:07 Найти цитируемый пост)
Вопрос 1: весь ли контекст продолжает жить или только тот, который использовался в замыкании (мне думается, что весь)? Вопрос 2: если первый случай в примере не замыкание, то контекст "родительской функции" будет удален по выходу, да? 

Надеюсь, что гуру Вам лучше всех ответит (не вмешиваюсь). Вам хочу искренне пожелать мыслить не контекстами (ну это же абстракция), а тем, что есть в языке. Начните со scope chain.

Цитата(dsCode @  1.3.2008,  19:07 Найти цитируемый пост)
если под FunctionDeclaration подразумевается function f() {...}, то почему нет?

Вопрос нужно читать в контексте заявления о делении на FunctionDeclaration и функции-closure.

Цитата(dsCode @  1.3.2008,  19:07 Найти цитируемый пост)
return function a() {alert(b);};

Это, кстати, не FunctionDeclaration (разве что в IE)...

Это сообщение отредактировал(а) AKS - 1.3.2008, 19:44
PM MAIL   Вверх
Zeroglif
Дата 1.3.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dsCode @  1.3.2008,  20:07 Найти цитируемый пост)
Вопрос 1: весь ли контекст продолжает жить или только тот, который использовался в замыкании (мне думается, что весь)?

Не совсем мне понятен вопрос, в каждой функции "живёт" чужая сохранённая scope chain того контекста исполнения, в котором функция была создана. Живёт и ждёт вызова функции. В момент вызова чужая scope chain объединяется с объектом активации вызванной функции, так из двух частей формируется уже её собственная scope chain, которую тоже может запомнить какая-нибудь другая вложенная уже в эту функцию функция.

Цитата(dsCode @  1.3.2008,  20:07 Найти цитируемый пост)
Вопрос 2: если первый случай в примере не замыкание, то контекст "родительской функции" будет удален по выходу, да?

Нет, у функций всё одинаково в этом смысле, просто в первом случае нет "свободных переменных", функция не будет их искать дальше своего собственного объекта активации, т.к. все её переменные связаны ею же.

Цитата(dsCode @  1.3.2008,  20:07 Найти цитируемый пост)
можно пояснить второй пункт?

Тут обсуждалось.

Цитата(Sardar @  1.3.2008,  20:01 Найти цитируемый пост)
Интересно, задано ли это поведение в ECMA или свободная интерпретация мозилловцев...

Это почти честное поведение согласно ES, только мне немного непонятна очередность объектов в scope chain в данном случае (надо снова разбираться). Тот объект, что в примере - это не AO, а спецобъект отдельно для хранения имени функции, которое может быть доступно только изнутри. Рррр... Как же надоели уже причуды с именованными вложенными FunctionExpressions...

Цитата(AKS @  1.3.2008,  19:21 Найти цитируемый пост)
Кстати, что с вызовом функции в контексте объекта? Как быть? Sardar’у уже устал, а я не могу нигде ничего подобного найти в контексте ES. Давайте уж Вы, что ли, такое же определение, как и с closure.

Надо подумать. По идее фразу "вызов в контексте бла-бла-бла" можно читать, как "вызов, при котором значением this является бла-бла-бла". При этом само собой просится, чтобы значение this никак не менялось в дороге. Отсюда я категорически не воспринимаю подстановку вместо реальных объектов, это ломает всю картину. С одной стороны получается, что энная функция вызвана в контексте глобального объекта, а с другой стороны это такие странности реализации, this такому вызову и не нужен вовсе. Раньше я считал, что нужен, сейчас понимаю, что был бы тот же null, хуже не стало бы, может даже и лучше.

Это сообщение отредактировал(а) Zeroglif - 1.3.2008, 20:31
PM MAIL WWW   Вверх
dsCode
Дата 1.3.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



Zeroglif, спасибо =) Т.е. scope chain "дочерней" функции в любом случае будет будет расширен полным scope chain'ом "родительской", если родительская возвращает дочернюю. Я имею в виду, если в замыкании используется лишь одна (свободная, не привязанная для замыкания) переменная из тысячи родительских var'ов, скоп чейн "дочерней" помимо своих var'ов будет содержать всю тысячу родительских, да?

Цитата(Zeroglif @  1.3.2008,  20:28 Найти цитируемый пост)
Нет, у функций всё одинаково в этом смысле, просто в первом случае нет "свободных переменных", функция не будет их искать дальше своего собственного объекта активации, т.к. все её переменные связаны ею же.


искать, пусть, не будет, а скоп чейн ее будет расширен родительской функцией?


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
Sardar
Дата 1.3.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(dsCode @  1.3.2008,  20:54 Найти цитируемый пост)
искать, пусть, не будет, а скоп чейн ее будет расширен родительской функцией?

По идее зависит от реализации. Транслятор может пробежаться по коду функции и выявить, что ссылок на не свои переменные нет, значит держать родительский контекст не нужно. А может и не делать (проще, но менее эффективно).

Код

function test() {
        var a = 90;
        
        //setTimeout(function() { a = 40; alert('Changed'); }, 3000);
        
        function bla(b) { //функция на прямую а не использует
            
            function wow() { //в то же время оптимизатор обязан либо всегда сохранять контекст, либо уметь отслеживать и вложенные определения функций (не сложно)
                return a + b;
            }
            return wow;
        }
        return bla;
    }
    
    var b = test();
    alert(b(10)()); //100
    alert(b(30)()); //120
    //setTimeout(function() { alert(b(50)()) }, 5000); //90



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


Участник форума
**


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

Репутация: 27
Всего: 52



Цитата(Zeroglif @  1.3.2008,  20:28 Найти цитируемый пост)
Надо подумать. По идее фразу "вызов в контексте бла-бла-бла" можно читать, как "вызов, при котором значением this является бла-бла-бла".

Меня смущает именно необходимость использования слова контекст. Получается так, что это слово используется не в техническом плане (как в информатике, где это определение подразумевает наличие какого-либо environment), а как в разговорном, т.е. для того, чтобы лишь подчеркнуть связь в выражении одного операнда с другим.

PM MAIL   Вверх
Zeroglif
Дата 1.3.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dsCode @  1.3.2008,  22:54 Найти цитируемый пост)
scope chain "дочерней" функции в любом случае будет будет расширен полным scope chain'ом "родительской", если родительская возвращает дочернюю

Без всяких "если". Вернут не вернут не важно. Это происходит в момент создания функции, а что с ней дальше будет происходить не играет никакой роли.

Цитата(dsCode @  1.3.2008,  22:54 Найти цитируемый пост)
если в замыкании используется лишь одна (свободная, не привязанная для замыкания) переменная из тысячи родительских var'ов, скоп чейн "дочерней" помимо своих var'ов будет содержать всю тысячу родительских, да?

Без всяких "если". Наличие/отсутствие переменных также не играет никакой роли. Функция помнит не var-ы, а объекты (Variable Objects), из которых состоит scope chain.

Цитата(dsCode @  1.3.2008,  22:54 Найти цитируемый пост)
искать, пусть, не будет, а скоп чейн ее будет расширен родительской функцией?

Да. Только не функцией, а scope chain.

Добавлено через 9 минут и 27 секунд
Цитата(AKS @  1.3.2008,  23:24 Найти цитируемый пост)
определение подразумевает наличие какого-либо environment

В принципе так и есть. Контекст - это чей-то мир, а this - ключ в этот мир.
PM MAIL WWW   Вверх
dsCode
Дата 1.3.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



Sardar, Zeroglif, ага, спасибо =)


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
AKS
Дата 2.3.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

Репутация: 27
Всего: 52



Цитата(Zeroglif @  1.3.2008,  22:25 Найти цитируемый пост)
Контекст - это чей-то мир, а this - ключ в этот мир. 

Если не секрет, был ли кто-либо из тех, на кого обычно ссылаетесь (Brendan, Richard etc), замечен Вами в употреблении чего-нибудь, вроде: "call the function in the context of some object" (это мне для расширения кругозора, если позволите)?

PM MAIL   Вверх
smartov
Дата 2.3.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



AKS, высаживаешь smile Честно говоря пока не дочитал до последней фразы... думал что все кончится вот так:

Цитата(Zeroglif @  1.3.2008,  21:25 Найти цитируемый пост)
Контекст - это чей-то мир, а this - ключ в этот мир.


Цитата(AKS @  2.3.2008,  10:36 Найти цитируемый пост)
Если не секрет, был ли кто-либо из тех, на кого обычно ссылаетесь (Brendan, Richard etc), замечен Вами в употреблении... 

тяжелых наркотиков  smile 
PM MAIL   Вверх
Zeroglif
Дата 2.3.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(AKS @  2.3.2008,  11:36 Найти цитируемый пост)
замечен Вами в употреблении чего-нибудь

Хех, моя шпионская сеть не раскинулась так широко. AKS, чего за червяк вас гложет-то, если вы посмотрите на родные доки JavaScript (начиная с 1.3), то в отношении тех же apply и call вся эта терминология применяется легко и непринуждённо:

Цитата

Allows you to apply a method of another object in the context of a different object (the calling object).
Allows you to call (execute) a method of another object in the context of a different object (the calling object).

что в переводе на более-менее формальный язык ES банально расшифровывается прямо там же, как:

Цитата

assign a different this object

Отсюда вы можете легко додумать, что, говоря о рядовом вызове функции/метода можно применить ту же самую терминологию, там ведь тоже есть this, только он не different, как при apply/call, вся разница. В общем, каждый транслирует ES по-своему, главное, чтобы эта трансляция не рушила идею, на мой взгляд "в контексте объекта" эту идею не рушит в отличие от вышеописанных здесь "наследуемого контекста" и "локального контекста", которые идею не передают. Лично я в голове в отношении this вообще использую конструкцию "передача в функцию скрытого аргумента", мне так удобнее...  smile 
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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