За последние 24 часа нас посетили 61503 программиста и 1746 роботов. Сейчас ищут 1327 программистов ...

this - кто он и зачем?

Тема в разделе "JavaScript и AJAX", создана пользователем Golovastik, 3 мар 2011.

  1. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Код (Text):
    1. function A ( ){
    2. this.t = function () { alert('Hello my little friend') }
    3. }
    4. var a = new A();
    5. a.t();
    Что означает this здесь, почему для каждого свойства и метода его нужно писать, почему без него нельзя описать свойство или метод?


    Читаю здесь http://javascript.ru/tutorial/object/thiskeyword
    Код (Text):
    1.  
    2. function Animal(name) {
    3.     this.name = name
    4. }
    5. animal = new Animal("beastie");
    Если следовать согласно картинке по этой ссылке:
    1. Конструктор Animal инициализирует объект под названием animal.
    2. После того, как инициализация объекта под названием animal прошла.
    конструктор Animal создал где-то в оперативной памяти ячейку с названием this
    которая стала ссылаться на свойства и методы конструктора под названием Animal?
    3. Что вызывается если уже всё вызвалось ,если следовать согласно картинке?

    Расшифруйте пожалуйста те, 3 пункта из той ссылки правильно.
    Заранее благодарю.
     
  2. Golovastik

    Golovastik Активный пользователь

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

    siiXth Активный пользователь

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Ох мать вашу в мемориз
     
  4. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    http://javascript.ru/tutorial/object/thiskeyword
    если из статьи будет не очень понятно, посмотри обязательно комментарии. там хорошие темы поднимаются
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    головастик что-то съел

    а еще есть self =)
     
  6. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    this указывает на объект класса или на свойство или метод класса?

    1)А где хранится this само, в чём оно находится, в интерпретаторе или в ячейке Оп памяти?
    2)
    Код (Text):
    1.  
    2. animal = new Animal("beastie");
    3.  
    После вызова конструктора, конструктор инициализировал объект и конструктор стал указывать на этот объект или this(встроенная конструкция языка джаваскрипт)?
    3)Вот этот код:
    Код (Text):
    1.  
    2. function Animal(name) {
    3.     this.name = name
    4. }
    Это создание конструктора или класса Javascript?
     
  7. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    если ты не будешь внимательно читать, то что тебе дают, то не будут и отвечать
     
  8. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Так я и читаю, конкретного пояснения не нашёл, поэтому и спросил.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Golovastik
    this указывает на объект класса или на свойство или метод класса?
    внутри класса он указывает на самого себя как это ни смешно. =)

    Golovastik
    1)А где хранится this само, в чём оно находится, в интерпретаторе или в ячейке Оп памяти?
    в компьютере все хранится в оперативной памяти, включая сам интерпретатор. Так что вопрос лишен смысла.
     
  10. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Код (Text):
    1. внутри класса он указывает на самого себя как это ни смешно.
    А если не внутри класса, а в этой строке кода где он находится и на что указывает?
    Код (Text):
    1.  
    2. animal = new Animal("beastie");
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Golovastik
    нипанятна. я не такой большой знаток скрипта, чтобы утверждать что это ошибка.
     
  12. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    То есть в зависимости от того в каком контексте зис находится он в зависимости от этого будет содержать ссылку на тот или иной именно объект, а не свойство или метод объекта?

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

    pavel.dyrov.psix

    На какой объект будет указывать ключевое слово зис.?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    при чем тут павел дуров и зис? ни на какой, видимо.
     
  14. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Если в Яваскрипте нету классов, тогда когда я создаю объект, я создаю объект объекта получается?
    Прочитал здесь: http://ru.wikipedia.org/wiki/Прототипное_программирование

    Код (Text):
    1.  
    2. В прототип-ориентированных системах предоставляется два метода
    3. создания нового объекта: клонирование существующего объекта,
    4.  либо создание объекта «с нуля».
    Получается написав так я объявил просто метод ТЕСТ со свойствами, но не класс?
    Код (Text):
    1.  
    2. <script type="text/javascript">
    3. function test(){
    4.     this.a = "Чай";
    5.     document.write(this.a);
    6. }
    7.  
    8. var sssr = new test;
    9. sssr.a;
    10. </script>
     
  15. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Здесь уточнить момент хотел.
    Код (Text):
    1.  
    2. <script type="text/javascript">
    3. function test(){  //Это создание метода с именем ТЕСТ, тоже самое что я создал объект ТЕСТ?
    4.     this.a = "Чай";
    5.     document.write(this.a);
    6. }
    7.  
    8. /*Если свойство объекта - это тоже объект, получается "объект объекта".*/
    9. //То есть sssr.a    свойство а - это объект?
    10. var sssr = new test;
    11. sssr.a;
    12. </script>
     
  16. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    А если бы я просто объявил функцию со свойствами, но не создавал бы объекта, тогда вот это:
    Код (Text):
    1.  
    2. function test(){
    3.     this.a = "Чай";
    4.     document.write(this.a);
    5. }
    означало бы создание объекта со свойствами?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    либо я, либо ты - кто-то из нас что-то путает.
     
  18. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Падабу, видимо, не знает в лицо украинского президента :)
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Падабу не знает про украину
     
  20. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  21. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    не, это слишком круто для меня.
     
  22. Golovastik

    Golovastik Активный пользователь

    С нами с:
    14 июл 2010
    Сообщения:
    193
    Симпатии:
    0
    Любое объявление любого объекта в JS - это конструктор?
    Код (Text):
    1.  
    2. function test(){
    3.     this.a = "Чай";
    4.     document.write(this.a);
    5. }
    Этот код - это описание конструктора test и одновременное его создание?