JavaScript の「クラスレス性」を体験するための良いコード例を作成しようとしています。これは私がこれまでに思いついたものです:
function One() {}
function Two() {}
One.prototype.a = 5;
Two.prototype.b = 4;
var obj = new One();
print("1) ctor =", obj.constructor, "a =", obj.a, " b =", obj.b);
obj.constructor = Two;
print("1) ctor =", obj.constructor, "a =", obj.a, " b =", obj.b);
var objTwo = new obj.constructor();
print("2) ctor =", objTwo.constructor, "a =", objTwo.a, " b =", objTwo.b);
そして、これらは対応するプリントです:
1) ctor = function One() {
} a = 5 b = undefined
1) ctor = function Two() {
} a = 5 b = undefined
2) ctor = function Two() {
} a = undefined b = 4
私の質問は、プロトタイプチェーンがここで本で機能しないのはなぜですか? JavaScript (spidermonkey) (spidermonkey-1.7) を使用して ideone で例を実行します。実際のプロトタイプは、constructor.prototype
?以外の方法でアクセスされているようです。
PSさらなる実験では、に割り当てるとobj.constructor
新しいプロパティが追加され、元のプロパティがシャドウされることが示されています。どうして?..