帮我分析下,这个具体是如何的,谁是谁的谁啊,一头雾水,想画个草图出来,都不知道画的对应谁了
function A(){};
function B(){
return new A();
}
A.prototype = B();
B.prototype = new B();
最好画图,分析出A,A的原型,A的实例以及相应B的,谢谢,我已经被绕晕了,弄不清楚了
帮我分析下,这个具体是如何的,谁是谁的谁啊,一头雾水,想画个草图出来,都不知道画的对应谁了
function A(){};
function B(){
return new A();
}
A.prototype = B();
B.prototype = new B();
最好画图,分析出A,A的原型,A的实例以及相应B的,谢谢,我已经被绕晕了,弄不清楚了
function B的结果返回一个A的实例
A.prototype = B();
做一下等价替换
A.prototype = new A();
如果一个构造函数返回一个对象,则它的实例的原型为这个对象
所以 B生成的实例的原型也是A
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
不是很理解这段代码的用途和意义,所以只能大概分析下,可能对也可能错。
首先简化下:
function A
在没有对
A.prototype
赋值前,是这样的:如果获取
A
的实例上的属性时没有找到,就会到原型上找,就是右边的那个{ constructor: Function A }
,所以instanceA.toString
最终是在Object
上找到的。到这里都能理解对吧,OK,然后,将
A.prototype
指向一个新对象,变成了这样:如果给
instanceA
添加任意属性:然后再实例化
A
得到的新实例,都有sayHello
方法,因为会到instanceA
上寻找,这里可以自己动手试试。function B
再来分析

B
构造函数。对,就是这样,和
function B
没有任何关系。