This
Друзья, допустим есть вот такая конструкция
function MyClass() { this.Method1 = Method1 this.Method2 = Method2 } function Method1() { ... } function Method2() { ... } var MyObject = new MyClass() А теперь в методе объекта MyObject я хочу узнать имя объекта MyObject. Возможно ли такое? |
var MyObject2 = MyObject; var MyObject3 = MyObject; Какое из имен MyObject вы хотите узнать? |
Цитата:
|
Дык это один и тот же объект, просто на него ссылается несколько имен.
Вам зачем? |
Цитата:
Цитата:
var MyObject2 = new MyClass() |
И в чем проблема?
|
Цитата:
|
Зачем?
|
Цитата:
А именно: как, если говорить терминами классического ООП, метод "класса" может получить имя "экземпляра"? Но вы, по всей видимости, не имеете ответа. |
В классическом ООП (и в любом другом тоже) нельзя получить имя экземпляра из метода, т.к. у экземпляра нет имени, есть ссылки на него, а вот у ссылок уже есть имена.
|
Видимо вы не понимаете, что такое переменная - ссылка на объект. Вам привели пример, когда для одного и того же объекта существует несколько ссылок с разными именами и не понятно какое из них должен бы был выдать интерпритатор JavaScript на ваш запрос, поэтому такой возможности нет. Пересмотрите способ решения задачи так, чтобы не возникало потребности получать имя ссылки на объект.
|
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. |
Часовой пояс GMT +3, время: 13:26. |