Skip to content

「メソッド呼び出しにおけるthis」の実行結果について #1309

Answered by azu
s-myk asked this question in 質問
Discussion options

You must be logged in to vote

コンソール上の上は obj の中身を表示してしまうからですね。

console.log(obj.method1()); // => obj

が意味しているのは

obj.method1() === obj

ということですね。

{ method1: [Function: method1], method2: [Function: method2] }

は obj の中身がダンプされて表示されています。
なので obj.method1() の実行結果は obj という意味になりますね。

仕組み/仕様?的な話をすると、
JavaScriptのオブジェクトそのものには関数と違って名前(nameのプロパティ)がありません。(自分で追加することは可能ですが、自動では名前はつかない。あと仕様的には内部的なプロパティとして同じ値を関数オブジェクトは持っているはず)

例えば関数は function 文だと名前が必須なのもあって、関数オブジェクト自体に name プロパティが自動で追加されるという仕組みがあります

そのため、関数オブジェクト自体をコンソールに出してみると、コンソールも名前をnameプロパティから参照できるので、わかりやすさのために表示しているんだと思います。
(どう出すかはJavaScriptの仕様じゃなくてブラウザとかのコンソールの実装ですね)

上ででている [Function: method1] とかもこのnameプロパティを元にだしています。

function a (){}

console.log(a.name); // => "a"

Arrow Functio…

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by azu
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
質問
Labels
None yet
2 participants
Converted from issue

This discussion was converted from issue #1164 on May 03, 2021 10:49.