Getting the object variable name in JavaScript

前端 未结 3 711
野性不改
野性不改 2020-12-02 00:51

I am creating a JavaScript code and I had a situation where I want to read the object name (string) in the object method. The sample code of what I am trying to achieve is s

3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-02 01:04

    This is definitely possible but is a bit ugly for obvious reasons. I think this can have some application in debugging. The solution makes use of the ability to get the line number for a code using Error object and then reading the source file to get the identifier.

    let fs = require('fs');
    class Foo {
        constructor(bar, lineAndFile) {
            this.bar = bar;
            this.lineAndFile = lineAndFile;
        }
        toString() {
            return `${this.bar} ${this.lineAndFile}`
        }
    }
    let foo = new Foo(5, getLineAndFile());
    
    console.log(foo.toString()); // 5 /Users/XXX/XXX/temp.js:11:22
    readIdentifierFromFile(foo.lineAndFile); // let foo
    
    function getErrorObject(){
        try { throw Error('') } catch(err) { return err; }
    }
    
    function getLineAndFile() {
        let err = getErrorObject();
        let callerLine = err.stack.split("\n")[4];
        let index = callerLine.indexOf("(");
        return callerLine.slice(index+1, callerLine.length-1);
    }
    
    function readIdentifierFromFile(lineAndFile) {
        let file = lineAndFile.split(':')[0];
        let line = lineAndFile.split(':')[1];
        fs.readFile(file, 'utf-8', (err, data) => { 
            if (err) throw err; 
            console.log(data.split('\n')[parseInt(line)-1].split('=')[0].trim());
        }) 
    }
    

提交回复
热议问题