第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(SafariやOperaも?)では__proto__でアクセスできる(ECMAScriptにない拡張である)ので、それを使うなら、
emp.__proto__ = Employee.prototype;
となる。
なので、
alert(Employee.prototype); // [object Object] alert(emp.prototype); // undefined alert(emp.__proto__); // IEではundefined, 他のモダンブラウザは[object Object]
となる。