-
該当ページ質問内容以下のコードを実行すると、
実行結果
|
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
コンソール上の上は
が意味しているのは
ということですね。
は obj の中身がダンプされて表示されています。 仕組み/仕様?的な話をすると、 例えば関数は そのため、関数オブジェクト自体をコンソールに出してみると、コンソールも名前を 上ででている function a (){}
console.log(a.name); // => "a" Arrow Functionとか関数式はちょっと特殊なことになっていて、自動的に変数の名前を const fn = () => {}
console.log(fn.name); // => fn
console.log(fn); // function fn() ただのオブジェクトはこのような |
Beta Was this translation helpful? Give feedback.
-
ご回答をありがとうございました。 typeofのように単純な文字列が返ってくることを想定していたのですが、今回の結果こそが(実装ごとの差はあれ)正確にobjを表しているといううことが分かり、納得しました。 |
Beta Was this translation helpful? Give feedback.
コンソール上の上は
obj
の中身を表示してしまうからですね。が意味しているのは
ということですね。
は obj の中身がダンプされて表示されています。
なので
obj.method1()
の実行結果はobj
という意味になりますね。仕組み/仕様?的な話をすると、
JavaScriptのオブジェクトそのものには関数と違って名前(
name
のプロパティ)がありません。(自分で追加することは可能ですが、自動では名前はつかない。あと仕様的には内部的なプロパティとして同じ値を関数オブジェクトは持っているはず)例えば関数は
function
文だと名前が必須なのもあって、関数オブジェクト自体にname
プロパティが自動で追加されるという仕組みがありますそのため、関数オブジェクト自体をコンソールに出してみると、コンソールも名前を
name
プロパティから参照できるので、わかりやすさのために表示しているんだと思います。(どう出すかはJavaScriptの仕様じゃなくてブラウザとかのコンソールの実装ですね)
上ででている
[Function: method1]
とかもこのname
プロパティを元にだしています。Arrow Functio…