JavaScript第5版(143p〜165p)
ようやくオブジェクトだー
と、その前に復習から
8.8.4 クロージャとしての入れ子型の関数(p142)
関数の中の変数は、保持される。
そして関数の中で作られた関数リテラルでは、上位の関数の値を保持している。
ほほー。これはおもしろい。
というわけでテストコード
var get = function() { var x = 'foo'; return { f1:function(data) { if(data) x = data; console.log(x); }, f2:function(data) { if(data) x = data; console.log(x); } }; }(); get.f1(); // foo get.f2('bar'); // bar get.f1(); // bar
f1とf2のcallは違うけど、上位のcallは同じになっていることが確認できる。
8.8.4.2 Internet Explorerにおけるクロージャとメモリリーク(p147)
IEだと循環参照するとcallの参照が0にならない。
たしかに。あーあ。
9.2 プロトタイプと継承
これはわかるぞっ
hasOwnProperty()
直属のプロパティかprototypeかをチェックする。
function MyObject() { method:function(){} }
と
function MyObject() { } MyObject.prototype.method = function(){}
この違いを判別するためらしいが、判別する必要があるコードにであえるだろうか。
9.2.1 継承プロパティへのアクセス(p155)
プロパティの方が、プロトタイプより優先される。
オブジェクトのプロパティの変更(obj.data = 'foo'など)は、必ずプロパティが変更される。
p156の図がとてもわかりやすい!
9.3 JavaScriptの「クラス」(p158)
比較されているのでまとまっていてとてもわかりやすいぞっ
9.3.2.1 インスタンスメソッドとthis
プロパティを参照するのにthisキーワードが必要。
はい。わかりました。そういう定義なんですね。
thisを使わなかったら、グローバル。使えば自分のオブジェクトのプロパティ。
9.3.7 プライベートメンバ(p165)
おぉーーー
すごいすごい。
クロージャとプライベート変数を組み合わせてこんなことができるのねー
function Integer(int) { this.intValue = function() {return int;}; } var i = new Integer(3); console.log(i.intValue()); // 3 i.int = -1; console.log(i.intValue()); // 3
- 1の代入は全く意味がない。
すばらしい。
もうこんな時間かー