JavaScriptの特徴

・オブジェクトが基本。
・オブジェクトのプロパティは、オブジェクトのコンストラクタ関数で初期化される。
・オブジェクトのプロパティは、オブジェクトのコンストラクタ関数に紐づけられているprototaypeオブジェクトへの参照をもつ。
・オブジェクトのプロパティの検索パスは、当該オブジェクト(インスタンス)固有のプロパティ→オブジェクトのコンストラクタ関数に紐づけられているprototaypeオブジェクトのプロパティ→オブジェクトのコンストラクタ関数に紐づけられているprototaypeオブジェクトが上位オブジェクトとして参照している(NN4ではprototype.__proto__プロパティで参照されるらしい)オブジェクトのプロパティ→・・・といった具合に、プロトタイプオブジェクトのチェーンをたどっていく。
・関数はレキシカルスコープのクロージャとして生成される。Schemeクロージャと同じものっぽい。
・次の

var o = new constructor() {
  this.x = 1;
}

はおおむね次と同じっぽい。正確には違うと思うけど。

var o = fconstructor() {
    othis = new Object();
   //プロパティの暗黙の初期化(fconstructor.prototypeプロトタイプチェーンの参照をothisに設定するとか)
  othis.x = 1;
    return othis;
}

・functionリテラルはレキシカルスコープのクロージャを生成するが、Functionコンストラクタ関数は常にグローバルスコープのクロージャを生成するので気をつけろ!(Functionコンストラクタ関数は明示的には使わないだろうけど、onclickするときなんかに結びつけられるクロージャは、きっと暗黙のうちにFunctionコンストラクタ関数が呼び出されてるんじゃないか?
クロージャのレキシカルスコープはCallオブジェクトのプロパティ。関数呼び出しされたときには暗黙のうちにオブジェクトが生成される。関数内の変数は当該オブジェクトのプロパティ。このオブジェクトはCallオブジェクトと呼ばれる。関数内で生成されたクロージャのレキシカルスコープの実体は、そのクロージャが生成されたときのCallオブジェクト。
・グローバルスコープはグローバルCallオブジェクトのプロパティ。
・とにかく「変数」は、Callオブジェクトのプロパティである。
・new Closure(f,o)というのがあるらしい。fの関数本体とし、オブジェクトoをCallオブジェクトと見なしてクロージャを生成するらしい・・・
・型の暗黙の変換に気をつけろ!暗黙の変換は、大抵valueOf()->toString()の順番でオブジェクトを変換し(逆の場合もあるらしい)、そのコンテキスとが求める型になったときの値が採用されるらしいので、そのコンテキスとがどの方を求めているかを意識しながらプログラムしないと思わぬ虫に出会いそう。(分かって使う分にはいいか?でもちょっと怖い。)
・オブジェクトを文字列として扱いたいときは、明示的にtoString()を呼んだ方がいい。文字列を数値として扱いたいときは、ParseInt()かParseFloat()した方がいい。オブジェクトやその定義によってvalueOf()の返り値が必ず数値になるとは限らないので気をつけよう。