平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

会社のjQuery勉強会

第1回はJavaScriptの復習だった。

終わったあと何人かで残って、いろいろ話した。
その時にnewとthisの話をして、

var emp = new Employee(arg1, arg2);

var emp = {};
emp.prototype = Employee.prototype;
Employee.call(emp, arg1, arg2);

と大体同じだよ、と言ったのだけど、微妙に間違ってた。
というのは、Employee.prototypeは実際に存在するプロパティなのだが、empのプロトタイプはあくまで内部的なプロパティであって、emp.prototypeでアクセスできるわけではなかった。

ちなみにIEだと完全に隠蔽されているが、FxやChrome(SafariOperaも?)では__proto__でアクセスできる(ECMAScriptにない拡張である)ので、それを使うなら、

emp.__proto__ = Employee.prototype;

となる。

なので、

alert(Employee.prototype); // [object Object]
alert(emp.prototype); // undefined
alert(emp.__proto__); // IEではundefined, 他のモダンブラウザは[object Object]

となる。