🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1195閲覧

consoleオブジェクト

yuu123

総合スコア6

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/11/10 20:01

consol.logがコンソールインスタンス作らずに呼び出せるのはなぜですか??
windows.consoleだからですか??
教えてください
初心者です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Console Living Standard

consol.logがコンソールインスタンス作らずに呼び出せるのはなぜですか??

仕様です。

https://triple-underscore.github.io/console-ja.html#console-namespace

[Exposed=(Window,Worker,Worklet)] namespace console { /* が、下の名前空間オブジェクト要件も見よ。 */

グローバルオブジェクト

またグローバルオブジェクトというのはwindows.とかのやつで、

ブラウザのグローバルオブジェクトは window です。

組み込みオブジェクトの場合はarrayなどはnewでインスタンス作らないとメソッドとかは使えませんよね??

new Array は [] と書けます。
Arraynew Windownew Function と書かなくとも、正しく機能します。

Re: yuu123 さん

投稿2019/11/10 23:49

think49

総合スコア18189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

回答は出ていますので、補足に留めますね。

既にインスタンスはシステムによって作られています

グローバルオブジェクトは windowに定義されたオブジェクトのことを言います。
window 部分を省略でき、どのスコープからも参照できます。

console.log( window.Array === Array ) // true window.myAry = new window.Array() // windowの書き換え:メンバ myAry を追加 myAry.push("hoge"); console.log( myAry === window.myAry ) // true console.log( myAry ) // ["hoge"]

開発に使うコンソール用オブジェクトは誤って書き換えられないよう
インスタンス(Arrayの例でいう myAry 部分)だけが参照できます。

是非、参照可能範囲であるJavaScript スコープオブジェクト汚染も調べてみてください。

投稿2019/11/10 21:32

編集2019/11/10 22:51
AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu123

2019/11/10 22:10

Arrayとかの組み込みオブジェクトも、windowに定義されてるってことですか?? windowに定義されてるから書き換えられたらまずいからインスタンスで使うってことですか? ってことは、windowとかwindow.consoleは書き換えられる可能性があるってことですか?
AkitoshiManabe

2019/11/10 22:20

組み込み(ビルトイン)オブジェクトは皆、windowオブジェクトに定義されています。Consoleタブで window. と入力すると確認できます。また、Console オブジェクトは細かな情報を扱うので悪用されない目的もあって限られた機能だけが公開されます。(書き換えについては、オブジェクト汚染を調べてみてください)
guest

0

グローバルに定義済みなオブジェクトだからです。
環境に依りますが、JavaScriptを実行しているときには既にインスタンスはシステムによって作られています。

console - Web API | MDN
https://developer.mozilla.org/ja/docs/Web/API/console

投稿2019/11/10 20:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuu123

2019/11/10 20:45 編集

派生オブジェクトなら、windows.console.logとしなくていいんですか?? またグローバルオブジェクトというのはwindows.とかのやつで、 組み込みオブジェクトの場合はarrayなどはnewでインスタンス作らないとメソッドとかは使えませんよね??
退会済みユーザー

退会済みユーザー

2019/11/10 21:15

派生はしていません。 ブラウザからconsoleだけでアクセスできる理由は、thisがwindowになっているからです。 Arrayオブジェクトという意味では使えているからnewで新しいインスタンスを作れるという言い方になります。 言語仕様的にもバージョンごとに用語や定義などが違ってきますが、この辺を参考にしてください。 オブジェクト指向 JavaScript 入門 - JavaScript | MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#The_object_(class_instance)
退会済みユーザー

退会済みユーザー

2019/11/11 00:28

なんだかいろいろな人が回答書いてくれてるので、少し補足しておきますね。 JavaScriptの言語仕様は歴史的経緯により、一言で言うとぐちゃぐちゃです。 なので、初心者とおっしゃっている方に正確な仕様を説明すると、都度湧き上がる疑問を解消するための歴史的経緯の説明が必要になってしまいます。でもそれは初学の人に必要な知識では全くありません。一行でも多くコードを書いた方が勉強になります。 そこで、なるべく嘘を入れずに(入ってるけど)、かつ個人のブログでない確からしいドキュメントをベースに説明をしました。結果的にかえって複雑になってしまったことをお詫びします。 質問者の方はすみませんが、書かれてしまった以上、なるべく細かい部分も理解して頂ければと思います。用語が割と他の言語の定義と正確には違うので、慣れた用語も定義は慎重に読んだ方がいいかもです。長文すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問