首页 > 解决方案 > 根据从 JavaScript 调用的方法获取变量名?

问题描述


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会使我返回 Foo 作为名称,但我正在寻找获取名称栏的方法。我怎样才能在 JavaScript 中做到这一点。

谢谢你。

标签: javascriptarraysjavascript-objects

解决方案


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,但我演示的最后两个示例仍然不起作用。


推荐阅读