了解原型的行为-JavaScript
作者:互联网
我不明白为什么会发生以下情况:
我有以下代码:
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?
解决方法:
B.prototype引用了与A.prototype相同的对象(第12行).在第16行上,您将此对象的引用存储到C.prototype.这意味着所有三个原型都指向同一对象,因此对A.prototype,B.prototype或C.prototype所做的所有更改实际上都将更改同一对象.在代码末尾,该对象具有三种方法:a,b和c.
标签:javascript-objects,prototype,javascript 来源: https://codeday.me/bug/20191121/2048721.html