Вот что я хочу:Получить имя экземпляра класса внутри класса
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
ли possibe реализовать в JavaScript?
Вот что я хочу:Получить имя экземпляра класса внутри класса
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
ли possibe реализовать в JavaScript?
Правда есть нет смысла делать это, единственный способ, которым я едва могу думать, чтобы петля все window
или область применения объектов и проверить какое-то равенство с текущим объектом, что-то вроде
this.do = function() {
for(var key in window) {
if(this === window[key]) {
alert(key);
}
}
};
Чтобы работать, вызовите его после его назначения.
var FOO = new Validator();
FOO.do();
Другой вопрос, который может придумать, что экземпляр (ссылка) может быть сохранен в различных переменных, поэтому, возможно, не получит то, что вы ожидаете.
Это работает, есть альтернатива, но похожее решение здесь http://stackoverflow.com/questions/2462199/javascript-list-global-variables-in-ie/2462341#2462341 –
Невозможно прямо сделать то, что вы просите здесь. Объекты сами по себе не определены в их имени сопоставимой переменной - на самом деле возможно иметь объекты, которые существуют, которые непосредственно не привязаны к переменной, и несколько переменных, назначенных одному и тому же объекту.
Интерпретатор javascript использует наши имена переменных в качестве идентификаторов, чтобы помочь с выполнением кода, но как только он запускает имя переменной, не имеет никакого значения для работающей javascript-программы, поскольку, вероятно, это сократилось до ссылки на память к моменту ее выполнения , полностью отделен от исходного кода, который вы написали.
Редактировать: Answer by yannis делает вид симулировать это, но он полагается на работу с переменными, доступными в определенной области действия - что я имел в виду, что нет прямого способа сделать это из самого объекта в соответствии с вашим примером в вопрос.
Дословный ответ на ваш вопрос будет:
(new Error()).stack
, чтобы получить информацию о линии и функции, в которой был вызван метод do()
.Я не рекомендую это делать.
Зачем вам это нужно? – zerkms
Не побеждает ли объект объектов в первую очередь? – BenM
Я не думаю, что 'FOO' - это имя экземпляра, а не имя переменной, которую экземпляр в настоящее время хранит. –