2015-03-12 2 views
0

Я хочу иметь доступ к имени var этого экземпляра класса изнутри метода. Могу ли я установить фактическое имя переменной как строку в конструкторе или что-то еще?Получить имя переменной из экземпляра объекта

var myClass = function(filePath){ 
    this.run = function(){ 
     // I want to access the string "x" 
     console.log(this.variableName); // ???? 

    }; 
}; 

var x = new myClass("./sayHi.js"); 
+4

Невозможно, зачем вы этого хотите? Вы можете получить доступ к своему экземпляру, используя ключевое слово 'this'. И вы должны определить свои методы на прототипе конструктора, а не внутри него. –

+1

Я не совсем понимаю, что вы хотите сделать. –

+1

Возможный дубликат [узнать имя переменной экземпляра из себя] (http://stackoverflow.com/questions/10911519/find-out-instance-variable-name-out-of-itself) –

ответ

-1

Передайте имя переменной в качестве параметра при построить его

var myClass = function(assigned_name,filePath){ 

    this.variableName = assigned_name 

    this.run = function(){ 
     console.log(this.variableName); 
    } 
} 

var x = new myClass('x','./sayHi.js'); 

x.run() 

Выход:

'x' 

Полезно для:

Хотя многие люди говорят, что это бессмысленно, я столкнулся с ситуацией, когда мне это нужно. И побочная заметка, многие операции jQuery полагаются на принцип знания того, что такое его собственное имя переменной. Это всегда «$». И люди ссылаются на «$» изнутри метода jQuery при назначении анонимных функций событиям onclick, не понимая, что именно это задает ваш вопрос.

Вам понадобится это, если ваш объект myClass() динамически назначает обработчики событий, которые обращаются к вашему конкретному экземпляру класса, поскольку эти вызовы часто зависят от информации, сохраненной в вашей конкретной переменной класса. Поскольку ваша функция myClass() не так широко распространена как jQuery, вы не можете рассчитывать на то, что она всегда назначается одной и той же переменной, например «$».

Передача собственного назначенного имени переменной самому себе, когда она построена, является лучшим способом, который я нашел, чтобы мой экземпляр класса знал, что такое его глобальная ссылка.

+0

jQuery - это фабричная функция, а не экземпляр, изнутри jQuery '$' имеет область действия, поэтому вы можете назвать jQuery, что бы вы ни хотели, существует режим «noConflict», который оставляет '$' не назначенным. Нет абсолютно никакой причины знать имя переменной экземпляров внутри экземпляра, поскольку это является явным нарушением принципов чистого программирования, а не в пределах ответственности экземпляра, чтобы знать, что делает внешний код. Что делать, если я вставляю экземпляр в массив или даже не назначаю его переменной? –

+0

Спасибо, но я действительно стараюсь избегать передачи конструктора объекта {path: "myWebWorker.js", varInstanceName: "newWorker"} – devAllTheNodes

+0

Любая помощь была бы полезна, с этим, формовочный язык console.log = function (msg) {alert (msg); }; – devAllTheNodes

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