最近看js原型链时候感觉很困惑啊,读了mdn关于prototype和继承的部分。 以下是我的理解和问题希望各位大神赐教
首先追溯到Object,他就是一个对象,对象的意思也就是一个属性集。 他有一个属性叫做prototype,当有新的类继承(基于原型其实没有继承,按照我的理解这个更像一个装饰者模式,也就是子类和父类是有一个的关系,而不是是一个的关系)Object的时候,这个子类会有一个构造函数用来定义自有属性,和一个prototype属性,也就是一个指针,指向父类的prototype对象。 也就是说在定义子类构造函数的时候我们其实是做了这样一个事
function a(prop){
this.prop=prop
}
声明了自有变量prop, 隐式声明了一个指针,叫做prototype, 指向Object.prototype. 当我们每一次初始化 a的实例的时候, 会隐式赋予该实例一个__proto__属性,他是一个指针,指向 a.prototype来达到父类方法共享的目的,这也就是为什么当我们修改 a.prototype内的方法的时候所有实例都会相应改变。 问题如下,
- 如果有 class b extends a{} 那也就是说b的prototype指向了a的prototype,也指向了object的prototye, 是这样吗?
- 如果我修改了 b.prototype.xxx = 'foo', a.prototype是否会有xxx属性
感谢各位大神的赐教。