Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Несколько вопросов касательно JavaScript(замыкания, классы..) (https://javascript.ru/forum/misc/12999-neskolko-voprosov-kasatelno-javascript-zamykaniya-klassy.html)

r1der 12.11.2010 02:20

Несколько вопросов касательно JavaScript(замыкания, классы..)
 
Пишу на 8 языках, потому часто в голове возникает путаница, потому и спрашиваю, чтобы подтвердить свои догадки ( не все моменты в книгах описаны так явно как хотелось бы)

1) Время жизни объекта
var x=function () { var arr=[0,1,2]; return arr; }
var t=x();

После того как создался массив/объект в функции и мы его вернули в глобальный контекст, t становится ссылкой на созданный объект, ссылка arr удаляется, но объект продолжает жить, верно?

2) Лексическая область видимости и замыкания, объект вызова
предположим есть функция
function createCounter() {
var numberOfCalls = 0;
return function() {
return ++numberOfCalls;
}
}
var fn = createCounter();

теперь с каждым вызовом fn numberOfCalls будет выступать в роли статической переменной и увеличиваться при каждом вызове? Это связано с тем что createCounter создает лексическую область видимости, что-то вроде класса и сохраняется в fn?

3) Классы в JS создаются так:
var cl=function (x) {
this.test=x;
this.method=function (x) { return x*x; }
}

в данном случае cl хранит в себе класс, и есть одно свойство и один метод, только такой способ создания классов возможен?

4) Книжка "с носорогом", это хорошее пособие по js? Есть ли что-нить получше?

Если возникнут еще вопросы напишу. Заранее спасибо всем за ответы.
JS учу 2 часа, не сомневайтесь всю инфу читал гуглил, спрашиваю людей знающих, чтобы удостоверится , что все так как надо понял, и путаница в голове от разных языков не исказила восприятие)

Gvozd 12.11.2010 02:40

Цитата:

Сообщение от r1der
После того как создался массив/объект в функции и мы его вернули в глобальный контекст, t становится ссылкой на созданный объект, ссылка arr удаляется, но объект продолжает жить, верно?

локальная переменная arr существует только в момент выполнения ф-ции, и разумеется исчезает.
объект-массив, на который она ссылается, остается, так как на него продолжает ссылаться глобальная переменная t
Цитата:

Сообщение от r1der
теперь с каждым вызовом fn numberOfCalls будет выступать в роли статической переменной и увеличиваться при каждом вызове? Это связано с тем что createCounter создает лексическую область видимости, что-то вроде класса и сохраняется в fn?

это связано с тем, что createCounter находится в замыкании, и только с этим.
на сайте есть отличная статья про замыкания
Цитата:

Сообщение от r1der
Классы в JS создаются так:

нет.
в JS нету классов. совершенно нету
и они никак не создаются, соответственно
все попытки создания классов в JS - ложь и провокация
всего лишь попытка привнести в язык привычный по-другим языкам механизм.
но, он в этом языке совершенно ни к месту, и не нужен

r1der 12.11.2010 15:02

да формально классов нет, но в коде часто видно, что создается подобие класса, и я как раз спрашиваю как это делается, а надо или не надо это другой вопрос, чаще всего все-таки надо

monolithed 12.11.2010 15:22

http://javascript.ru/tutorial/object/inheritance
http://javascript.ru/tutorial/object

Gvozd 12.11.2010 23:52

Цитата:

Сообщение от r1der
что создается подобие класса,

подобие.
это примерно то же самое, как если нарисовать коту на заднице морду слона, а хвост разукрасить как хобот.
подобие, и только
Цитата:

Сообщение от r1der
и я как раз спрашиваю как это делается

противоестественным образом это делается
а как именно, можно найти в гугле.
да и на форуме наверняка мелькало.
в общем, ищите, если вам очень нужно.
Кстати, вы говорите, что уже видели это в коде.в чем проблема выдрать оттуда?
Цитата:

Сообщение от r1der
чаще всего все-таки надо

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

vladlen 13.11.2010 02:32

Цитата:

Сообщение от Gvozd
а как именно, можно найти в гугле.

Все куда хужее, это есть и в учебнике.
Но кому он нужен, есть же форум :(

Gvozd 13.11.2010 02:51

vladlen,
сам когда-то это читал.
но за личной ненадобностью уже и забыл.


Часовой пояс GMT +3, время: 10:35.