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にならない。
たしかに。あーあ。

8.9 Function()コンストラクタ(p148)

Functionコンストラクタは静的スコープを使わない。
これは重要だ。でも使わない。混乱するから。

9.1 コンストラクタ(p151)

まってました!
this。わかるけど、厳密にはいったい何を差しているんだろう。
なんかjavaと微妙な違いがありそうで怖い

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の代入は全く意味がない。

すばらしい。


もうこんな時間かー