Получить имя переменной на основе методов, которые были вызваны из JavaScript? - PullRequest
0 голосов
/ 31 марта 2020

class Foo {
    constructor(name) {
        this.name = name;
    }
    sayHello() {
        // get the name of the class here which is defined as bar
        console.log(`Hello ${this.name}`)
    }
}

var bar = new Foo("John");
bar.sayHello();

Здесь, как вы можете видеть, существует определенный класс с именем Foo, и с ним связан метод, называемый sayHello. Итак, когда я вызвал этот метод, например bar.sayHello();, как я могу получить доступ к имени переменной, которая bar. Я знаю, что bar.constructor.name вернет мне имя Фу, но я ищу способ получить строку имени. Как я могу сделать это в JavaScript.

Спасибо.

1 Ответ

0 голосов
/ 31 марта 2020

Javascript не разрешает доступ к именам переменных. Вы просто не можете получить имя переменной из фактического значения переменной надежным способом, и вы не должны это делать в первую очередь. Однако, если вам действительно нужно по какой-то необъяснимой причине и вы используете браузер javascript, вы можете просто просканировать объект окна (обратите внимание, что это будет работать, только если ваша переменная не является примитивом).

function getVarName(variable) {
    for (let key in window) {
        if (window[key] == variable) {
            return key;
        }
    }
    return null;
}
var var1 = {};
foobar = {};
let var2 = {};
const var3 = {};
console.log(getVarName(var1)); // var1
console.log(getVarName(foobar)); // foobar
console.log(getVarName(var2)); // null
console.log(getVarName(var3)); //null

Обратите внимание, что последние два не работают, потому что это хак, который никоим образом не гарантированно работает.

РЕДАКТИРОВАТЬ: Это также работает в узле, если вы используете global вместо window, но последние два примера, которые я продемонстрировал, все равно не будут работать.

...