JavaScript原型和原型链(纯文本总结版)
js这门语言在ES6之前是不存在类的概念的,它不能像java那样通过类实现继承,但是可以通过原型实现继承。在js中万物皆对象,构造函数也是对象,每一个构造函数都有一个prototype属性,这个属性是一个指针,指向一个普通的对象,这个对象就是原型对象,原型对象里面的所有属性可以被指向它的构造函数所生成的实例所共享,这样就实现了继承。举个例子,比如说function Car()这个构造函数,用来生产汽车实例, Car.prototype指向的就是Car的原型对象,Car.prototype.color = 'red’就相当于给这个原型对象加了一个color属性,这样一来通过new Car()创建的实例都可以通过.color访问到color这个属性,这样就实现了属性继承。在使用Vue开发项目的时候,在main.js中经常会用这种方式把一些属性添加到Vue的原型上,来实现不同组件的属性共享。
刚刚我说过js中万物皆对象,包括上面说过的函数对象在内的每一个对象被创建出来的时候系统都会给它添加一个__proto__属性,这个属性是一个指针,指向它的构造函数的的原型对象。比如拿刚才那个function Car()举例,我们通过new Car()创建一个小car对象,之前说了每一个对象都有一个系统内置的__proto__属性,这个小car当然不例外,它的__proto__属性即指向大Car的prototype原型对象。当我们访问小car中的某一个属性时,首先会在自身查找,如果找不到则会去大Car的prototype中查找,如果还是没有找到,则会去大Car的prototype中的__proto__属性所指向的prototype中查找,就这样形成了一条原型链,当找到原型链的顶端也就是Object.prototype.proto=null时还是没有找到的话则返回undefined。以上就是我对于原型和原型链的理解。
原创声明:本文为原创文章,转载请注明出处,谢谢