我想编写一些代码示例来体验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
访问?P.S. 进一步的实验表明,对
obj.constructor
进行赋值会添加新属性,这会遮盖原始属性。为什么?..
constructor
属性在内部没有任何作用。 - Felix Kling