js的原型及原型链问题

帮我分析下,这个具体是如何的,谁是谁的谁啊,一头雾水,想画个草图出来,都不知道画的对应谁了


    function A(){};

    function B(){

        return new A();

    }

    A.prototype = B();

    B.prototype = new B();

最好画图,分析出A,A的原型,A的实例以及相应B的,谢谢,我已经被绕晕了,弄不清楚了


蓝山帝景
浏览 505回答 2
2回答

吃鸡游戏

不是很理解这段代码的用途和意义,所以只能大概分析下,可能对也可能错。首先简化下:function A(){};// A.prototype = B();// 得到一个 A 的实例const instanceA = B();A.prototype = instanceA;function B(){    return new A();}// B.prototype = new B();// 得到一个 B 实例,实际这个实例是 A 的实例const instanceB = new B();B.prototype = instanceB;function A在没有对A.prototype赋值前,是这样的:如果获取A的实例上的属性时没有找到,就会到原型上找,就是右边的那个{ constructor: Function A },所以instanceA.toString最终是在Object上找到的。到这里都能理解对吧,OK,然后,将A.prototype指向一个新对象,变成了这样:如果给instanceA添加任意属性:function A(){};// A.prototype = B();// 得到一个 A 的实例const instanceA = B();instanceA.sayHello = function () {    console.log('hello A');}A.prototype = instanceA;然后再实例化A得到的新实例,都有sayHello方法,因为会到instanceA上寻找,这里可以自己动手试试。const test = new A();test.sayHello(); // hello Afunction B再来分析B构造函数。对,就是这样,和function B没有任何关系。

德玛西亚99

function B的结果返回一个A的实例A.prototype = B();做一下等价替换A.prototype = new A();如果一个构造函数返回一个对象,则它的实例的原型为这个对象所以 B生成的实例的原型也是A
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript