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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> this - кто он и зачем он? 
:(
    Опции темы
Golovastik
Дата 2.3.2011, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



Код
function A ( ){
this.t = function () { alert('Hello my little friend') }
}
var a = new A();
a.t();

Что означает this здесь, почему для каждого свойства и метода его нужно писать, почему без него нельзя описать свойство или метод?
PM MAIL   Вверх
bars80080
Дата 3.3.2011, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



метод не может существовать сам по себе, он является элементом структуры класса. а какой класс (объект) подразумевается при объявлении метода? вот мы и указываем:

someobj.newmethod = function() {}

- для стороннего объекта

или 

this.newmethod = function() {}

- для объекта в котором мы его объявляем

Это сообщение отредактировал(а) bars80080 - 3.3.2011, 00:33
PM MAIL WWW   Вверх
Golovastik
Дата 3.3.2011, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



Читаю здесь http://javascript.ru/tutorial/object/thiskeyword
Код

function Animal(name) {
    this.name = name
}
animal = new Animal("beastie");

Если следовать согласно картинке по этой ссылке:
1. Конструктор Animal инициализирует объект под названием animal.
2. После того, как инициализация объекта под названием animal прошла.
конструктор Animal создал где-то в оперативной памяти ячейку с названием this
которая стала ссылаться на свойства и методы конструктора под названием Animal?
3. Что вызывается если уже всё вызвалось ,если следовать согласно картинке?

Расшифруйте пожалуйста те, 3 пункта из той ссылки правильно.
Заранее благодарю.
PM MAIL   Вверх
Golovastik
Дата 3.3.2011, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



Код

// Вот здесь в первой строке метод Animal - это класс?
function Animal(name) { 
    this.name = name 
}
animal = new Animal("beastie");


Скажите, а сам this находится в оперативной памяти компа, где-то в ячейке? И в этот момент, когда  конструктор вызвался, он сразу инициализировал объект animal выделив сразу и память для него и сразу сам конструктор с именем Animal стал указывать на любое свойство и метод класса Animal или сама конструкция this,которая лежит где-то в оперативной памяти компа и хранит адрес, стала хранит ссылку, а не конструктор стал хранить ссылку на любое свойство или метод класса?
PM MAIL   Вверх
Golovastik
Дата 4.3.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



Ответьте кто-нибудь.
PM MAIL   Вверх
z-END
Дата 4.3.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


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

Репутация: 1
Всего: 102



Golovastik,  ты определись с вопросом. что такое this внутри класса, или же как браузеры осуществляют обработку javascript и выделяют память.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
SelenIT
Дата 4.3.2011, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Думаю, начать имеет смысл со спецификации языка (тут перевод). Спецификация, конечно, суровая, без поллитры в ней едва разберешься... но без нее понять что-либо еще труднее. У браузеров бывают свои тонкости, но в главном они стараются следовать спецификации.

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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Golovastik
Дата 5.3.2011, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



А если бы я просто объявил функцию со свойствами, но не создавал бы объекта, тогда вот это:
Код

function test(){
    this.a = "Чай";
    document.write(this.a);
}


означало  бы создание объекта со свойствами?

Это сообщение отредактировал(а) Golovastik - 5.3.2011, 01:05
PM MAIL   Вверх
SelenIT
Дата 5.3.2011, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Да. Функция — сама по себе уже объект (с некоторыми особыми внутренними свойствами).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Golovastik
Дата 5.3.2011, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 0



Любое объявление любого объекта в JS - это конструктор?
Код

function test(){ 
    this.a = "Чай"; 
    document.write(this.a); 
} 


Этот код  - это описание конструктора test и одновременное его создание?
PM MAIL   Вверх
SelenIT
Дата 5.3.2011, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Насколько я понимаю, можно сказать, что так. В JS нет "просто описаний", всё — объекты (кроме примитивов). Любая функция — объект, способный (потенциально) выступать чьим-то конструктором (насколько я сам понимаю;).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ksnk
Дата 5.3.2011, 08:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Golovastik @  5.3.2011,  01:47 Найти цитируемый пост)
Этот код  - это описание конструктора test и одновременное его создание? 

Нет. Это - конструктор объекта.
Объект, к к которому будет применяться конструктор, появляется явным образом оператором new. Аргументом new идет конструктор будущего объекта. new выдает указатель на это свежесозданый объект.

Просто вызвать test без оператора new - будет логическая ошибка, но не ошибка времени исполнения, так как фактически, вызов этой функции будет производится как вызов метода объекта window.
Код

function test(){
    this.a = 'Чай';
}
alert(window.a);
test();
alert(window.a);

Вообще, все неописанные идентификаторы и функции автоматически становятся методами и свойствами объекта window. Это такая добрая, хотя и местами мудрая, черта JS  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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