12.11.2010, 02:20
|
Новичок на форуме
|
|
Регистрация: 12.11.2010
Сообщений: 2
|
|
Несколько вопросов касательно 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 часа, не сомневайтесь всю инфу читал гуглил, спрашиваю людей знающих, чтобы удостоверится , что все так как надо понял, и путаница в голове от разных языков не исказила восприятие)
|
|
12.11.2010, 02:40
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от r1der
|
После того как создался массив/объект в функции и мы его вернули в глобальный контекст, t становится ссылкой на созданный объект, ссылка arr удаляется, но объект продолжает жить, верно?
|
локальная переменная arr существует только в момент выполнения ф-ции, и разумеется исчезает.
объект-массив, на который она ссылается, остается, так как на него продолжает ссылаться глобальная переменная t
Сообщение от r1der
|
теперь с каждым вызовом fn numberOfCalls будет выступать в роли статической переменной и увеличиваться при каждом вызове? Это связано с тем что createCounter создает лексическую область видимости, что-то вроде класса и сохраняется в fn?
|
это связано с тем, что createCounter находится в замыкании, и только с этим.
на сайте есть отличная статья про замыкания
Сообщение от r1der
|
Классы в JS создаются так:
|
нет.
в JS нету классов. совершенно нету
и они никак не создаются, соответственно
все попытки создания классов в JS - ложь и провокация
всего лишь попытка привнести в язык привычный по-другим языкам механизм.
но, он в этом языке совершенно ни к месту, и не нужен
|
|
12.11.2010, 15:02
|
Новичок на форуме
|
|
Регистрация: 12.11.2010
Сообщений: 2
|
|
да формально классов нет, но в коде часто видно, что создается подобие класса, и я как раз спрашиваю как это делается, а надо или не надо это другой вопрос, чаще всего все-таки надо
|
|
12.11.2010, 15:22
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
|
|
12.11.2010, 23:52
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от r1der
|
что создается подобие класса,
|
подобие.
это примерно то же самое, как если нарисовать коту на заднице морду слона, а хвост разукрасить как хобот.
подобие, и только
Сообщение от r1der
|
и я как раз спрашиваю как это делается
|
противоестественным образом это делается
а как именно, можно найти в гугле.
да и на форуме наверняка мелькало.
в общем, ищите, если вам очень нужно.
Кстати, вы говорите, что уже видели это в коде.в чем проблема выдрать оттуда?
Сообщение от r1der
|
чаще всего все-таки надо
|
нет, не надо.
это просто так только кажется.
потому что большинство людей не могут понять как это "объекты есть, а классов нету", и не умеют пользоваться прототипным ООП
как следствие пытаются сделать язык похожим на классовый язык.
то есть на то, чем он изначально не являлся и не должен
|
|
13.11.2010, 02:32
|
|
Кандидат Javascript-наук
|
|
Регистрация: 19.10.2010
Сообщений: 143
|
|
Сообщение от Gvozd
|
а как именно, можно найти в гугле.
|
Все куда хужее, это есть и в учебнике.
Но кому он нужен, есть же форум
__________________
Если хочешь что-то сделать - сделай это…
|
|
13.11.2010, 02:51
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
vladlen,
сам когда-то это читал.
но за личной ненадобностью уже и забыл.
|
|
|
|