1.原型
js中每个对象都有一个特殊的prototype属性,它就是对象的原型。
本质上prototype是对其他对象的引用,在有的浏览器上可以用_proto_来访问,比如谷歌,但是按照标准应该用object.getPrototypeOf()来获取
2.原型链
- 原型链允许一个JavaScript对象继承另一个对象的属性和方法。这实现了JavaScript中的基于原型的继承。
- 每个对象都有一个内部的[[Prototype]]属性,可以通过__proto__访问,指向该对象的原型对象。如果没有显式设定,就是null。
- 原型对象也可能有原型对象。一个对象可以通过它的内部[[Prototype]]指针访问另一个对象的属性。这形成了一条“原型链”。
- 当访问一个对象的属性时,如果该对象内部不存在这个属性,那么会查阅它的原型,如果在原型中找到了该属性就会返回它。原型链中的所有对象都会被搜索查找属性。
- 这种搜索过程会一直向上移动原型链,直到找到一个匹配的属性或到达原型链的末尾(Object.prototype)。
- 所以原型链的核心思想就是:利用原型让一个引用类型继承另一个引用类型的属性和方法。原型链的查询也是沿着原型链进行的。
- 通过原型链,可以实现代码的重用以及不同对象间共享功能,这与类继承概念相似。它是JavaScript基于原型的继承的实现方式。