编程语言
首页 > 编程语言> > 了解原型的行为-JavaScript

了解原型的行为-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