我不明白为什么会发生以下情况:
我有以下代码:
singleton = (function() {
somePrivFunction = function() {
return new B();
}
A = function() {};
B = function() {};
C = function() {};
A.prototype.a = function() { console.log("a"); };
B.prototype = A.prototype;
B.constructor = B;
B.prototype.b = function() { console.log("b"); };
C.prototype = A.prototype;
C.constructor = C;
C.prototype.c = function() { console.log("c"); };
return {
someFunction: function() {
return somePrivFunction();
}
}
})();
当我致电singleton.someFunction()
时,它会返回B
的实例。但是以下所有工作都是:
singleton.someFunction().b(); // Prints "b"
singleton.someFunction().a(); // Prints "a"
singleton.someFunction().c(); // Prints "c", but why? Shouldn't it be undefined?
答案 0 :(得分:3)
B.prototype
引用了与A.prototype
相同的对象(第12行)。在第16行,您将此同一对象的引用存储到C.prototype
。这意味着所有三个原型都指向同一个对象,因此对A.prototype
,B.prototype
或C.prototype
所做的所有更改实际上都会更改同一个对象。在代码的末尾,此对象有三种方法:a,b和c。