Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 21:08   #1
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию this - кто он и зачем?

Код:
function A ( ){
this.t = function () { alert('Hello my little friend') }
}
var a = new A();
a.t();
Что означает this здесь, почему для каждого свойства и метода его нужно писать, почему без него нельзя описать свойство или метод?
Kasper1 вне форума Ответить с цитированием
Старый 02.03.2011, 21:43   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

this - указывает на данный "класс" (если его так можно назвать) или объект или функцию, т.е. в данном случае создает новый метод для данной функции.
Без него вы не сможете вызвать a.t();
Cronos20 вне форума Ответить с цитированием
Старый 03.03.2011, 01:10   #3
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Читаю здесь 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 пункта из той ссылки правильно.
Заранее благодарю.

Код:
// Вот здесь в первой строке метод Animal - это класс?
function Animal(name) { 
    this.name = name 
}
animal = new Animal("beastie");
Скажите, а сам this находится в оперативной памяти компа, где-то в ячейке? И в этот момент, когда конструктор вызвался, он сразу инициализировал объект animal выделив сразу и память для него и сразу сам конструктор с именем Animal стал указывать на любое свойство и метод класса Animal или сама конструкция this,которая лежит где-то в оперативной памяти компа и хранит адрес, стала хранит ссылку, а не конструктор стал хранить ссылку на любое свойство или метод класса?

Последний раз редактировалось Kasper1; 03.03.2011 в 02:04.
Kasper1 вне форума Ответить с цитированием
Старый 03.03.2011, 08:30   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

this указывает на экземпляр данного класса.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 04.03.2011, 00:14   #5
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Код:
this указывает на экземпляр данного класса.
На объект класса или на его свойство и ли метод объекта?

1)А где хранится this само, в чём оно находится, в интерпретаторе или в ячейке Оп памяти?
2)
Код:
animal = new Animal("beastie");
После вызова конструктора, конструктор инициализировал объект и конструктор стал указывать на этот объект или this(встроенная конструкция языка джаваскрипт)?
3)Вот этот код:
Код:
function Animal(name) { 
    this.name = name 
}
Это создание конструктора или класса Javascript?
Kasper1 вне форума Ответить с цитированием
Старый 04.03.2011, 01:14   #6
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

В данном случае this будет указывать на экземпляр класса только внутри конструктора. За его пределами объект, на который указывает this, зависит от контекста исполнения. Советую прочитать вот эту книгу: http://www.proklondike.com/books/jav...rograming.html
Цитата:
У вашего кода в JavaScript всегда будет какая-то разновидность контекста (объект, внутри которого он
работает). Это свойственно и другим объектно-ориентированным языкам, но без тех экстремальных
обстоятельств, которые встречаются в JavaScript.
Контекст проявляется посредством переменной this. Эта переменная всегда будет ссылаться на объект,
внутри которого код в данный момент работает. Следует помнить, что глобальные объекты фактически являются
свойствами объекта window. Это означает, что даже в глобальном контексте переменная this будет ссылаться на
объект.
Цитата:
Это создание конструктора или класса Javascript?
Это создание объекта, у которого свойство name будет равно значению аргумента name конструктора
WhiteSpirit вне форума Ответить с цитированием
Старый 04.03.2011, 01:44   #7
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

То есть когда я написал функцию, а в ней внутри, свойства и методы, я создал не класс, а объект?
А потом когда я написал строку:
animal = new Animal("beastie");
Я вызвал конструктор не класса, а объекта?


То есть в зависимости от того в каком контексте зис находится он в зависимости от этого будет содержать ссылку на тот или иной именно объект, а не свойство или метод объекта?

Если я напишу так

pavel.dyrov.psix

На какой объект будет указывать ключевое слово зис.?
Цитата:
Скачал вашу книгу и на 9 странице прочитал:"// Метод класса Lecture, используемый для генерации
// строки, которую можно использовать для отображения информации о лекции
" Получается классы есть в JAVASCRIPT?

Последний раз редактировалось Kasper1; 04.03.2011 в 01:58.
Kasper1 вне форума Ответить с цитированием
Старый 04.03.2011, 08:29   #8
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Советую сначала всётаки по-больше почитать. Мне кажется, Вы совершенно не понимаете, что Вам отвечают на Ваши же вопросы.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 04.03.2011, 15:14   #9
WhiteSpirit
Пользователь
 
Регистрация: 28.05.2010
Сообщений: 82
По умолчанию

Kasper1, если хотите совсем взорвать мозг, напишите в скрипте
Код HTML:
alert(this == window)
alert(this == document.body)
alert(this == document.body.childNodes[0])
alert(this == document.scripts[0])
и посмотрите результат
upd: результат смотреть в IE

Последний раз редактировалось WhiteSpirit; 04.03.2011 в 15:20.
WhiteSpirit вне форума Ответить с цитированием
Старый 04.03.2011, 21:55   #10
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Если в Яваскрипте нету классов, тогда когда я создаю объект, я создаю объект объекта получается?
Прочитал здесь: http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D0%B5

Код:
В прототип-ориентированных системах предоставляется два метода 
создания нового объекта: клонирование существующего объекта,
 либо создание объекта «с нуля».
Получается написав так я объявил просто метод ТЕСТ со свойствами, но не класс?
Код:
<script type="text/javascript">
function test(){
    this.a = "Чай";
    document.write(this.a);
}

var sssr = new test;
sssr.a;
</script>
Здесь уточнить момент хотел.
Код:
<script type="text/javascript">
function test(){  //Это создание метода с именем ТЕСТ, тоже самое что я создал объект ТЕСТ?
    this.a = "Чай"; 
    document.write(this.a);
}

/*Если свойство объекта - это тоже объект, получается "объект объекта".*/
//То есть sssr.a    свойство а - это объект?
var sssr = new test;
sssr.a;
</script>
А если бы я просто объявил функцию со свойствами, но не создавал бы объекта, тогда вот это:

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

означало бы создание объекта со свойствами?
Любое объявление любого объекта в JS - это конструктор?
Код:
function test(){ 
    this.a = "Чай"; 
    document.write(this.a); 
}
Этот код - это описание конструктора test и одновременное его создание?

Последний раз редактировалось Kasper1; 05.03.2011 в 01:48.
Kasper1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зачем нужна история? Levsha100 Свободное общение 84 19.12.2010 09:06
Зачем нужен Unit? alex198555 Общие вопросы Delphi 3 20.08.2010 01:10
Зачем живем? Simply-Art Свободное общение 6 16.10.2008 15:44
Кто сможет разъяснить как и зачем использовать виртуальные функции в C++? Dunhil Помощь студентам 5 20.12.2007 14:19