— javascript, tutorials — 1 min read
今回、かなり難しいです。特にスコープ、グローバルオブジェクト、this。 このあたりは、繰り返し説明する予定ですので、今は完全に理解できなくてもOKです!
前日の資料はこちら +JavaScript道場:四日目 / オブジェクトについて
this
前回は下記のようなコードを書きましたね!
「オブジェクト」 と 「プロパティ」 という名前に慣れてください。
1var matsudaShinsuke = { name: "松田信介" } // ここがプロパティ keyは`name` valueは`松田信介`2obj.name // これもプロパティ(nameは `objオブジェクト`のプロパティ)
何度も登場していますコチラのコード
1console.log("HELLO")
console
とは なんでしょうか?
.log
とは なんでしょうか?
("hello")
とはなんでしょうか?
1// Chrome: Consoleタブで実行してみよう2 3typeof console4// "object5 6typeof console.log7// "function"8 9// ("hello") についてはまだ説明していませんが、関数に引数を与えて実行しています。次回やります。
console
はオブジェクト
、そしてlog
はconsoleオブジェクトが持つプロパティなのだった!console
についての詳しい説明はこちら。ちょっと読んでみて下さい!
聞き慣れない言葉が出てきました。グローバルオブジェクトです。
百聞は一見に如かず、まずはいつものようにconsoleタブで試してみます。
1// Chrome: Consoleタブで実行してみよう2 3var a = 1004console.log(a) // 1005console.log(this.a) // 1006 7// this.a の中身を書き換えてみる8this.a = 2009console.log(a) // 20010console.log(this.a) // 200
this
とはなんでしょう?1// Chrome: Consoleタブで実行してみよう2 3this
注: Chromeブラウザの場合です。JavaScriptは実行されるブラウザによって挙動が違う場合があります。
this
はオブジェクトでした!そして、これが グローバルオブジェクト です。
そのため、this
を使って参照ができます(グローバルスコープでは・・・)
これでもいける!
これもいける!
1// Chrome: Consoleタブで実行してみよう2 3this.window.console.log("hello")
どうやら同じ動きをするようですね。(同じオブジェクトを指している・・・?)
1// Chrome: Consoleタブで実行してみよう2// 全部同じ意味です!3 4console.log("hello")5this.console.log("hello")6window.console.log("hello")7this.window.console.log("hello")
では下記のように書くとどうなるでしょうか?
1// Chrome: Consoleタブで実行してみよう2 3// オブジェクトの中に二つ関数があり、関数内でthisを使う4var obj = {5 test_a: function() {6 // thisなし7 console.log("hello")8 },9 test_b: function() {10 // thisあり11 this.console.log("hello")12 }13}
test_a()
は問題なしで、test_b()
はエラーになります。this
が何を指すか変わるからです。
エラーメッセージにCannot read property
と出力されていますね。
これならOK
1// Chrome: Consoleタブで実行してみよう2 3var obj = {4 test_a: function() {5 // tihsなし6 console.log("hello")7 },8 test_b: function() {9 // this ではなく window を使う10 window.console.log("hello")11 }12}
this
は呼び出される場所でどのオブジェクトを指すかが変わるかなり難しい話をしていますので、現時点では分からなくても大丈夫です!
ここをちゃんと理解するためには、「変数のスコープ」「グローバルオブジェクト」にについて理解する必要があります。
次回は、その「変数のスコープ」について解説します!
全てを順を追って説明するのがどうしても難しいため、説明が行ったり来たりします。 今の段階では、完璧に理解しようとしないでください。 まずは、オブジェクト、プロパティ、スコープなどの単語に慣れることから始めてください。
console
は、オブジェクト
だったconsole.log
はconsoleオブジェクトが持つlog
という名前のプロパティ(メソッド)console.log("hello")
以外にも console.clear()
などがあるconsole
自体もwindow
というグローバルオブジェクトのプロパティなので、window.console.log("hello")
で呼び出すことができるthis
を使ってアクセスする際は、スコープ
を意識する必要がある難しいですね!!難しいので現時点で理解できなくても全く問題ないです!!それではまた明日!!
明日は「関数」の説明に入ります!
↓↓まだ答えてない方はコチラから!↓↓ 答えてみる
答え → 153
11 0 0 1 1 0 0 1 // 100110012128 64 32 16 8 4 2 1 // それぞれの桁を10進法に直す3128 0 0 16 8 0 0 1 // ビットが立っている箇所だけ足す 128+16+8+1=153
時計は60進法ですね(60で桁が上がる 0-59 の数字を使う) 0:59 → 1:00 1:59 → 2:00
二進法は 0,1
の2つの数字を用いて表す
十進法は 0,1,2,3,4,5,6,7,8,9
の 10個の数字を用いて表す
十六進法は 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
の 16個の数字を用いて表す
またはJavaScriptで
1// Chrome: Consoleタブで実行してみよう2 3// parseInt は 十進数に変換ができる関数4console.log(parseInt(10011001, 2)); // 153
「文字に割り当てた番号」と「実際にコンピュータさんが扱う数字」の対応表。 「文字符号化方式」 の一つ。文字コードは「文字に割り当てられた数字」。文字符号化方式としてUTF-8を使うときの符号化文字集合はUnicode。
(参照)コチラから引用しました!
自分なりに理解していればOKです。
3Byte = 24bit = 24桁
1// 00000000 00000000 00000000 ~ 11111111 11111111 1111111122**24 // 2の24乗316777216 // 1677万7216色
次回はこちら JavaScript道場:6日目 / 関数について❶