リテラルでprototype書いたら
function X(){}; X.prototype.a='a'; var x=new X(); console.log(x.__proto__); // X { a="a"} console.log(x.constructor); // X()
疑惑のリテラル
function Y(){}; Y.prototype={a:'a'}; var y=new Y(); console.log(y.__proto__); // Object { a="a"} console.log(y.constructor); // Object()
何故YでなくObject?
どういう違いでこうなるのかしら。
リテラルで代入すると実はダメってこと?
ははーん、ではこれなら?
function Z(){}; (function(){ this.a='a'; }).apply(Z.prototype); var z=new Z(); console.log(z.__proto__); // Z { a="a"} console.log(z.constructor); // Z()
これだと大丈夫。
今まで結構普通にリテラルで使ってきたけど、実はよくないのだろうか。
確かにまるごと代入しているので、元あるもの(しかしprototypeの初期値は空の筈??)を上書きしているには違いないが。。