【发布时间】:2015-01-14 06:44:04
【问题描述】:
我不明白为什么会发生以下情况:
我有以下代码:
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?
【问题讨论】:
-
你把 A、B、C 继承都弄错了。 Dog 是 Animal,但 Animal 不一定是 Dog,因此将一个原型设置为等于另一个原型是错误的。您可以改用 Object.create。以下答案可能会有所帮助:stackoverflow.com/questions/16063394/…
标签: javascript prototype javascript-objects