yamazaki3104
@yamazaki3104 (やまざき)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JavaScript で記述したObjectの名称を表示したい(取得したい)のです

JavaScript で記述した Object の名称を表示したい(取得したい)のです

たとえば、このコードを

class Hoge
{
    constructor()
    {
    }

    put_log_object_name()
    {
        console.log( /* 1 */ )
    }
}

const aaa = new Hoge()
const bbb = new Hoge()

aaa.put_log_object_name() // 'aaa'
bbb.put_log_object_name() // 'bbb' とLOGに出したい

実行して、log に
aaa
bbb
と表示したい場合は、/* 1 */ の部分に、どのような記述をするのが適切でしょうか。

よろしくお願いします。


結論→「JavaScript ではできない」
なぜならば、オブジェクトは誰に束縛(参照)されているのか、情報を持っているわけではないから。

暫定対応
こう書くのがよさそうです。

class Hoge
{
    constructor( _name )
    {
        this.obj_name = _name
    }

    put_log_object_name()
    {
        console.log( this.obj_name )
    }
}

const aaa = new Hoge('aaa')
const bbb = new Hoge('bbb')

aaa.put_log_object_name() // 'aaa'
bbb.put_log_object_name() // 'bbb'

スッキリしました!ありがとうございました!

0

2Answer

これはJavaScriptでは不可能みたいです。複数の変数が同じオブジェクトを参照できますが、オブジェクト自身はどの変数を介して自分にアクセスされたかは分からないようです。

参考元:
https://stackoverflow.com/a/42870338

1Like

Comments

  1. @yamazaki3104

    Questioner

    なるほど。できない理由が理解できました。解決はしませんでしたが、スッキリしました。ありがとうございます。

put_log_object_nameメソッドに引数を渡すのが良いと思います。
見当違いでしたらすいません。

class Hoge
{
    constructor()
    {
    }

    put_log_object_name(name)
    {
        console.log( name );
    }
}

const aaa = new Hoge()
const bbb = new Hoge()

aaa.put_log_object_name('aaa') // 'aaa'
bbb.put_log_object_name('bbb') // 'bbb' とLOGに出したい

0Like

Comments

  1. @yamazaki3104

    Questioner

    コメントをありがとうございます。

    しかしながら、解決したいことは、引数で渡すのではなく、object 自身が自分の名前はわかっている(どこかに記録されている)はずなので、その情報を参照したかったのです。

    たとえば this.proto.obj_name とかなんとか、、、、

    おっしゃるように、引数で指定すれば解決はできるのですが、すべての呼び出し箇所に、間違えずに引数を指定するのがちょっとたいへんだなぁと思ってまして、そこを安全に解決したかったのです。

Your answer might help someone💌