Тема: This
Показать сообщение отдельно
  #12 (permalink)  
Старый 18.11.2008, 12:46
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

arseniy-at-home, Вам не нужно это, для идентификации текущего объекта, ссылки this должно хватать.


.ps: извращения ради:

Однако, если все же инстансы созданы вручную, и гарантированно нет ссылок в виде других переменных на эти инстансы, то задайте имя вручную - через свойство:

function A() {};
A.prototype.test = function () {
  alert(this.__instanceName);
};

var a = new A();
var b = new B();

b.__instanceName = 'b';
a.__instanceName = 'a';

a.test(); // a
b.test(); // b


Естественно, если будет ссылка:

var c = a;


то результат будет соотвествующий (взятый из объекта, на которых ссылается "с", т.е. из объета "а"):

c.test(); // a


что еще раз подтверждает, что это ненужная затея, и для этих целей есть ссылка this.

Еще более извращенное (только не вздумайте так делать, пишу ради прикола):

Если инстансы глобальные, то можно пройтись циклом по объекту window в поисках инстанса; далее, взять имя ключа window:

A.prototype.test = function () {
  for (var k in window) {
    if (window[k] === this) {
      alert('__instance: ' + k); // =)
    }
  }
};


a.test(); // a
b.test(); // b


И снова в случае ссылки, Вы получите бред:

var c = a;
c.tets(); // c, a


Так что, мыслите объектами в пространстве (со связями и ссылками друг на друга), а не статическими именами.

В дополнение можно почитать эту статью - http://javascript.ru/tutorial/object/thiskeyword.
__________________
Тонкости ECMAScript
Ответить с цитированием