Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как посмотреть на кого указывает this? (https://javascript.ru/forum/misc/25684-kak-posmotret-na-kogo-ukazyvaet.html)

jsuse 12.02.2012 19:19

Как посмотреть на кого указывает this?
 
Как можно увидеть на какой объект/функцию указывает this?

Когда я вызываю внутри функции-конструктора:
alert(this);

он пишет только
[object Object]

А вот как узнать какой именно object он имеет ввиду? К какому object он относится?

nerv_ 12.02.2012 19:38

в данном примере this - window|global
alert(this == window);

Если речь идет о new Function(), то this == window.

Mахmахmахimus 12.02.2012 19:39

console.log(this) и смотри в консоль


Цитата:

Сообщение от jsuse
Когда я вызываю внутри функции-конструктора

если функцию вызвать с оператором new то сначала создается пустой обьект, потом запускается функция и this в этой функции указывает на этот обьект

Serg_pnz 13.02.2012 11:29

Красиво вывести массив или объект можно этим http://javascript.ru/php/print_r#comment-8219

jsuse 13.02.2012 15:35

Цитата:

Сообщение от Serg_pnz (Сообщение 157124)
Красиво вывести массив или объект можно этим http://javascript.ru/php/print_r#comment-8219

Шикарная функция, спасибо. Примерно это и хотел. Я думал, что есть какая-то функция, куда передаешь this, а она возвращает название его или объекта или функции-конструктора. Типа так как-то
var bar = object_name(this);
alert(bar);             // выводит имя кому принадлежит this

Но это еще лучше

Mахmахmахimus 13.02.2012 19:27

Цитата:

Сообщение от jsuse
а она возвращает название его

у обьектов нет названий, ты имел ввиду возвращать название идентефикатора по которому был получен обьект?

jsuse 14.02.2012 23:18

Цитата:

Сообщение от Mахmахmахimus (Сообщение 157240)
у обьектов нет названий, ты имел ввиду возвращать название идентефикатора по которому был получен обьект?


Сори, непонятно написал. Имел ввиду имя переменной объекта, созданного из функции-конструктора. То есть примерно так:

function Animal(name) {
    this.name = name;
    obj_name(this);          // и вот эта функция бы выводила просто "dog", то есть имя объекта, на которой указывает this
};
var dog = new Animal("Шарик");


В функции-конструкторе есть this. Как понять, на какой объект он указывает? Здесь, в этом примере, допустим явно видно, что this - это dog. А если вложенных функций окажется много, и в каждой будет еще по несколько с замыканиями и своими this. Вот чтобы облегчить это отслеживание, на какой объект указывает какой-то конкретный this, хотелось бы такую функцию, как в примере. Ставишь ее в какой-то функции, где есть this, но сразу не ясно, что это за this, а она тебе через alert тут же выводит имя объекта этого this
obj_name(this);     // выводит имя объекта, т.е. dog в примере

Kolyaj 14.02.2012 23:36

Это невозможно.

Mахmахmахimus 15.02.2012 01:39

Цитата:

Сообщение от Kolyaj (Сообщение 157478)
Это невозможно.

вообще пока в js нет перегрузки операторов это действительно невозможно, потому что открою очевидность новичку, у обьекта может быть 1 000 000 ссылок и все они могут лежать в разных переменных.


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