2015-06-21 2 views
0

В JavaScript, как вы получаете имя переменной, объявившей новый объект.Как получить имя переменной, объявившей новый объект

function asdf() { 
     this.dosomething = functon() { 
      var a = 1; 
     }; 
    } 

    var qwer = new asdf(); 

В то время как в пределах ASDF(), я хочу, чтобы иметь возможность узнать имя переменной, которая создала этот экземпляр объекта.

+0

Имена переменных должны рассматриваться как метаданные и не должны влиять на поведение во время выполнения (если, конечно, вы действительно не выполняете метапрограммирование). –

ответ

1

Вы не можете. На самом деле переменная не создает объект вообще. Переменная просто содержит ссылку на объект, но может быть несколько таких ссылок.

Также не должно быть необходимости в этом. В пределах asdf вы можете использовать ключевое слово this, чтобы обратиться к самому экземпляру, который будет тем же экземпляром, что и qwer.

Если вам нужен экземпляр внутри методов asdf тоже, вы можете создать локальную переменный объект, например, так:

function asdf() { 
    var memyself = this; // Store reference to `this` 
    this.dosomething = functon() { 
     var a = 1; 
     // Use stored reference, because `this` will refer to `dosomething` here. 
     mymyself.dosomethingelse(); 
    }; 

    this.dosomethingelse = functon() { 
     alert('hello'); 
    }; 
} 

var qwer = new asdf(); 

Другого пример, пусть объект привязки себя к событию элемента , Я намеренно поместил имена в HTML уже, но вы даже можете сгенерировать весь HTML из массива имен. HTML для начала должен содержать только элемент, или после которого добавить div для каждого имени.

Ваш объект может быть ответственным за время жизни div. Если вы создаете объект с именем в качестве параметра, он может создать div, добавить текст, прикрепить обработчик события и даже удалить div. Ниже приведенный ниже фрагмент не продвинут, он просто находит элемент и прикрепляет один из его методов к событию click этого элемента.

function asdf(element) { 
 
    // If element is a string, use it as id to fetch an actual element. 
 
    // (Some error checking required in prodction code). 
 
    if (typeof element === "string") { 
 
    element = document.getElementById(element); 
 
    } 
 
    // Store references to myself and my element. 
 
    var me = this; 
 
    me.element = element; // 'this' could be used instead of 'me'. 
 
    
 
    // Declare method 
 
    this.doSomething = function() { 
 
    alert(me.element.innerText); // Here, 'me' is required. 
 
    } 
 
    
 
    // Bind method to click event. 'this' could be used instead of 'me'. 
 
    me.element.addEventListener('click', this.doSomething); 
 
} 
 

 
// Create three object for the three elements. 
 

 
// You may store the object in a variable 
 
a = new asdf('john'); 
 
// But you don't even need to. The object can just exist without external 
 
// reference (well, apart from the element which still uses its event handler). 
 
new asdf('jane'); 
 
new asdf('nick');
Click a name to alert it. 
 
<div class="button" id="john">John Doe</div> 
 
<div class="button" id="jane">Jane Da</div> 
 
<div class="button" id="nick">Nick Name</div>

Я надеюсь, что это проблема, которую вы пытаетесь решить, и что это решает ее. Если вам все равно нужно добраться до quer, вы, вероятно, используете плохой дизайн. Если вы укажете более подробную информацию, я (или кто-то другой) найдет для вас лучшее решение.

+0

Причина, по которой я пытаюсь понять это, состояла в том, чтобы я мог вызвать onclick = "qwer.dosomething()" в динамически созданный html. Теперь я просто передаю имя переменной qwer как часть аргументов, когда я ее определяю, и это работает нормально, но я не знал, есть ли лучший способ сделать это. – seaBass

+0

Если вы хотите, чтобы объект присваивал себя элементу, вы можете сделать это без переменной. Я добавил второй фрагмент, который показывает, как это можно сделать. Единственное, что знает объект, это элемент. Он может привязываться к элементу. Нет необходимости хранить ссылку в переменной, как вы можете видеть. – GolezTrol

+0

@Andrew: Решение здесь не создает HTML и использует встроенные обработчики событий, но использует API DOM и блокировки (при необходимости). Подробнее об обработке событий см. Http://www.quirksmode.org/js/introevents.html. В следующий раз я предлагаю спросить о реальной проблеме, которую вы пытаетесь решить. –

Смежные вопросы