什么是原型?每个函数都有一个原型(prototype)属性,它是一个指向对象的指针。该对象的目的是包含特定类型的所有实例共享的属性和方法。该对象(原型对象)用于共享实例。属性和方法。functionPerson(){}Person.prototype.name='Nicholas';Person.prototype.age='29';Person.prototype.job='软件工程师';Person.prototype.sayName=function(){console.log(this.name);};varperson1=newPerson();person1.sayName();//Nicholasvarperson2=newPerson();person1.sayName();//Nicholasconsole.log(person1.sayName===person2.sayName);//true下面是关系图从上图中我们可以看到的原型(prototype)属性构造函数,指向原型对象因为当前原型对象属于Person构造函数,所以它的构造函数指向Person构造函数。实例1和实例2都指向原型对象,因此证明Person.prototype定义的属性和方法将与其实例共享。即person1.sayName===person2.sayName在代码中返回true。即它们使用的是同一个函数(函数的引用地址相同)。当调用构造函数创建一个新的实例时,该实例将包含一个指针(内部属性)即[[Prototype]],它指向构造函数对象的原型。尽管在脚本中没有访问[[Prototype]]的标准方法,但Firefox、Safari和Chrome等浏览器支持每个对象上的属性proto;需要注意的是,实例1和实例2的[[Prototype]]都是指向原型对象,而不是直接指向构造函数本身。虽然无法访问[[Prototype]]属性,但是可以通过原型对象的isPrototypeOf()方法判断实例是否指向构造函数的原型对象,Person.prototype.isPrototypeOf(person1)在ES5中返回true,增加了一个新方法Object.getPrototypeOf(),返回[[Prototype]]的值至此,你应该明白了原型、原型对象和构造函数之间的关系。什么是原型?链?假设一个原型对象等于另一个类型的实例,另一个类型的原型对象等于另一个类型的实例。这就是所谓原型链的基本概念。//定义构造函数:超类函数SuperType(){this.property=true;}SuperType.prototype.getSuperValue=function(){returnthis.property;};//定义构造函数:子类函数SubType(){this.subproperty=false;}//SubType.prototype等于SuperType的实例,即重写SubType原型对象SubType.prototype=newSuperType();//重写原型对象后,新方法SubType.prototype。getSubValue=function(){returnthis.subproperty;};varinstance=newSubType();关系图什么是继承?可以理解为,假设有函数A和函数B,函数A继承自函数B。那么函数B中的属性方法也可以访问和使用函数A中的继承。方式有很多种:原型链继承、复合继承、原型继承、寄生继承、寄生复合继承。文章内容/灵感来源于以下内容借鉴【持续维护/更新500+前端面试题/笔记】https://github.com/noxussj/In...【大数据可视化图表插件-in]https://www.npmjs.com/package...【使用THREE.JS实现3D城市建模(珠海市)】https://3d.noxussj.top/