【问题标题】:Get the variable name based on the methods that it was called from JavaScript?根据从 JavaScript 调用的方法获取变量名?
【发布时间】:2020-03-30 23:24:04
【问题描述】:

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 中做到这一点。

谢谢。

【问题讨论】:

  • 可以通过一两个技巧来实现这一点,但它非常很奇怪 - 绝对没有必要这样做。脚本永远不应该依赖于它的变量名。

标签: javascript arrays javascript-objects


【解决方案1】:

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

请注意最后两个如何不起作用,因为这是无法保证起作用的 hack。

编辑:如果您使用global 而不是window,这也适用于节点,但我演示的最后两个示例仍然不起作用。

【讨论】:

  • 我想像这样使用它: var x = new MyClass() x.MyExtensionMethod() and, MyExtensionMethod() { //get the name "x"不知何故 } 这可能吗?
猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2011-07-30
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多