Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

オブジェクトのプロパティにアクセスする方法

解決したいこと

現在deck.glを勉強中です。deck.glにPointCloudLayerというのがあり、お手本通りにインスタンスを生成しました(表示もできました)。生成したインスタンスの構造を知りたく、コンソールに出力した結果、以下のような画面になりました。

const layer = new PointCloudLayer({ ... });
console.log( layer );

20231211.png

ここでlayer.props配下を見ると下の方にSymbol(asyncPropOriginal)Symbol(asyncPropResolved)Symbol(component)の3つがあります。

これらの要素を操作するにはどのように記述すればよいのでしょうか。

発生している問題・エラー

console.log( layer.props['Symbol(asyncPropResolved)'] );

上記のように記述するとundefinedと出力されてしまいます。
多分JavaScriptのSymbolのことなのだろうとは思うのですが、普段Symbolを使うことがなかったこともあり、指定の方法がわかりません。
要素の中身はconsoleから確認できますが、この要素を操作するにはどのようにすればよいでしょうか(色々とテストしていて操作したいというのが理由です)。
どなたかご教示いただけますか。よろしくお願いします。

0

2Answer

deck.gl についての知識はないのですが、シンボルが公開されてるかどうかだと思うのでレポジトリを検索してみました。

https://github.com/search?q=repo%3Avisgl%2Fdeck.gl+asyncPropOriginal&type=code
この辺りを見ると Symbol.for なので同じ文字列を与えたら同じシンボルが取得できそうです。

layer.props[Symbol.for('asyncPropOriginal')]

とかでどうでしょう?

(ちなみに Symbol('str')Symbol.for('str') は異なるものです)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol

3Like

Comments

  1. @UsagiLabo

    Questioner

    ソースまで確認してくださり、ありがとうございました。
    ご指摘いただいた記述でオブジェクトを取得することが出来ました。
    「シンボルが公開されているか否か」という点、大変勉強になります。まだSymbolの使い道がわかりませんが、少し自分で調べてみたいと思います。
    ありがとうございました。

以下でいけますか?

const sym = Symbol('asyncPropOriginal')
console.log( layer.props[sym] );
0Like

Comments

  1. @UsagiLabo

    Questioner

    undefinedでした。
    Symbol自体が一意性を確保しているようなので、同じ値でインスタンスを生成しても取得できないようです。
    元質問の結論としては取得不可、ということになるのでしょうか。

    ちなみに操作したい値については別のアクセサから取得できることがわかったのでプログラム作成については問題なくなったのですが、Symbol使用時の挙動を知りたいので引き続き質問をオープンの状態とさせてください。

Your answer might help someone💌