目录
1.什么是原型和原型链?
2.原型链的作用?
3.原型链的特点?
4.关于__proto__和prototype?
1.什么是原型和原型链?
js:万物皆对象,可知源头就是object。
原型:
- 所有引用类型都有一个
__proto__(隐式原型)属性,属性值是一个普通的对象。 - 所有函数都有一个
prototype(原型)属性,属性值是一个普通的对象。 - 所有引用类型的
__proto__属性指向它构造函数的prototype。
原型链:
理解为一条链子,一条链接原型对象和实例对象链子。在访问一个对象的属性时,先会在自身的属性查找,通过__proto__原型上查找,也就是他的构造函数prototype里面查找,还是找不到的话,会在往上查找也就是prototype.__proto__查找,就这样一层一层查找直到为null才结束。
2.原型链的作用?
- 以重复使用,优化代码,实现继承。
- 函数的所有实例都可以访问构造函数原型中的方法和属性
3.原型链的特点?
实现了继承。
但是存在两个问题:
- a包含引用类型值的原型属性会被所有实例共享。
- b在创建子类型时,无法向超类型的构造函数中传递参数。
4.关于__proto__(隐显原型)和prototype(显示原型)?
__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性。__proto__指向的是当前对象的原型对象,而prototype指向的,是以当前函数作为构造函数构造出来的对象的原型对象。
两个的关系:
__proto__隐式原型指向创建这个对象的函数(constructor)的prototype。