「WEB API」の「console」オブジェクトを、JavaScriptを書いて、「WEB API」を使用している状況なのか?
それともJavaScriptのグローバルオブジェクトを、JavaScriptを書いて「メソッド」として使用している状況なのか?
回答
どちらもあてはまります。見方の違いです。
要約すると、
- 一番目は設計としての「console」に関する言及
- 二番目は実装としての「console」に関する言及
です。
ただし両者の境界は完全に分離しているものではなく、重なる部分があります。
補足
設計としての「console」
・Web APIである Console API は、どちらかといえば設計仕様としての意味を持ちます。
「console というオブジェクトはどのようなメソッドやプロパティを持っているか」とか「logというメソッドはどのように動作する」、「dir というメソッドはどのように動作する」とかを規定した概念上の決まりみたいなものが、Web APIの一部としての Console API 仕様に規定されています。
実装としての「console」
・一方、具体的に利用する場合、「console」という名前は、グローバル名前空間に置かれており、どこからでもアクセスできます。 この名前によってアクセス可能な console オブジェクトは、前述の仕様に則って log や dir 等のメソッドを持っています。各メソッドは仕様に基づいてコンソールへの出力に関連する機能が実装されています。
ただし、APIに規定されたオブジェクトのメソッドを使うことを「APIを実行する」と言ったりするので、Web API の文脈で言及されているからといって、直ちに実装を意味しないとは限りません。
まとめ
・console.log("出力したい文字列");
という式で、出力したい文字列が出力できるのは、その振る舞いがWeb API(の一部である Console API)仕様に規定されており、それをブラウザの作り手がその通りに実装しているからです。
この意味で、「Web API」仕様に規定された「console」オブジェクトを使用している状況に該当します。
・console.log("出力したい文字列");
という JavaScript の式は、グローバル名前空間にある、console という名前のオブジェクトにアクセスし、そのlog メソッドを、引数をつけて呼び出しているものです。
この意味でJavaScriptにおいて、グローバルオブジェクトのメソッドを使用している状況に該当します。
くりかえしますが、両者の境界は完全に分離しているものではなく、重なる部分があります。