我正在尝试制作一些好的代码示例来体验 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
添加了新属性,这会影响原始属性。为什么?..