実現したいこと・発生している問題
お恥ずかしい質問なのですが、どうにもはまってしまいました。
dataという単純な値を格納したオブジェクトを作ろうとしたときに起こった問題です。
dataを定義するためにgetTitleという、既存のプロパティを参照する関数を作ろうと思ったのですが、
それが形にならず、問題が起きました。
js
1const data = { 2 mode1: { 3 title: getTitle("mode2") 4 }, 5 mode2: { 6 title: "success" 7 } 8} 9const getTitle = function (mode) { 10 return data[mode].title;// Uncaught ReferenceError: Cannot access 'getTitle' before initialization 11};
dataのmode1プロパティを定義している時点では、getTitleは定義されてないため呼出し不能です。
ならばdataとgetTitleの定義の順序を逆にしようと考えましたが、
js
1const getTitle = function (mode) { 2 return data[mode].title;//Uncaught ReferenceError: Cannot access 'data' before initialization 3}; 4const data = { 5 mode1: { 6 title: getTitle("mode2") 7 }, 8 mode2: { 9 title: "success" 10 } 11}
そういう事ではなかったようです。
dataはまだ定義が完了されていない値なので、それを参照しようというのが不可能だという事でした。
ではdataを先に空オブジェクトで定義しておいて、プロパティ毎に,また参照が必要でない値から順に追加すれば実現は無事完了しますが…
それではプロパティを書く順序がmode2から始まって逆になるし、prototypeのように元オブジェクトの名前をプロパティ毎に書かなければいけないのはなんだかいけない気がする…
…いや、こんな考えはこだわりなのか?
完成物の規模が大きくないだけに、シンプルな形を求めようとして、よけいに頭がこんがらがっているのです…
できれば完成した変数dataは普通のオブジェクトのように値として扱いたく、
関数getTitleは定義を助ける関数として、dataが完成すればお役御免、という形を望んでいます。
皆さんならどうするのか、どうか実現に対するご指南のほど、よろしくお願いいたします。
試したこと
dataオブジェクトを関数でくるんだ場合無限に参照しあってエラーが出ました。
またゲッタのようにdata本体を値、getTitleをメソッドのようにした新しいオブジェクトを作り、
thisで値を参照しようとしましたが、何も問題は変わりませんでした…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/21 01:29
2020/04/21 02:01