目的:
让A继承自B,B继承自C,但是前后两种写法换了位置,为什么第一种写法B的原型指向的是Object而不是C,第二种写法却是正确的?
我的理解:
我的理解是prototype指向一个对象,表示为原型对象,那么在第一种写法里面,我将new B(),赋值为A的原型属性,那么new B()这个对象的__proto__指向其构造函数B的原型对象,然后我将构造函数B的原型指向new C()对象。 但是为什么结果却和预想的不一样呢?
第一种写法:
第二种写法:
让A继承自B,B继承自C,但是前后两种写法换了位置,为什么第一种写法B的原型指向的是Object而不是C,第二种写法却是正确的?
我的理解是prototype指向一个对象,表示为原型对象,那么在第一种写法里面,我将new B(),赋值为A的原型属性,那么new B()这个对象的__proto__指向其构造函数B的原型对象,然后我将构造函数B的原型指向new C()对象。 但是为什么结果却和预想的不一样呢?
第一种写法:
第二种写法:
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答877 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
js有变量提升,所以第一段相当于
Update:
你的疑惑点可能是如果我改变了一个方法的prototype属性,那么原先new的对象会不会
自动更新
原型对象?抽象一下上面的过程,变成以下:
简化一下,用
c
代替b.__proto__
,d
代替B.prototype
:也就是一开始
c
和d
指向同一个对象,然后使d
指向另外一个对象,那么请问此时c
是否会自动更新
,指向新的对象?答:为什么会自动更新。