Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 18.11.2008, 11:35
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Видимо вы не понимаете, что такое переменная - ссылка на объект. Вам привели пример, когда для одного и того же объекта существует несколько ссылок с разными именами и не понятно какое из них должен бы был выдать интерпритатор JavaScript на ваш запрос, поэтому такой возможности нет. Пересмотрите способ решения задачи так, чтобы не возникало потребности получать имя ссылки на объект.
Ответить с цитированием
  #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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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