与大部分面向对象语言不同,ES6之前中并没有引入类(class)的概念,JavaScript并非通过类而是直接通过构造函数来创建实例。在介绍原型和原型链之前,我们有必要先复习一下构造函数的知识。
**这里的原型就是 ---- Person.prototype **
函数有原型,函数有一个属性叫prototype,函数的这个原型指向一个对象,这个对象叫原型对象。这个原型对象有一个constructor属性,指向这个函数本身。 js规定每一个函数都有一个proto属性,而且对应的是自身的原型,
在js函数对象除了proto之外还有prototype属性,当函数作为构造函数创建实例时,该属性就被作为实例对象的原型,并且这个属性是一个对象数据类型的值。
一张图就可以表示构造函数和实例原型之间的关系: 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。
当一个对象调用自身不存在的属性和方法时就会去自己的proto的前辈prototype对象上去找,如果没找到就会去prototype的前辈上去找 直到找到或者返回undefiend 这个查找的过程就是原型链
举例说明:person → Person → Object ,普通人继承人类,人类继承对象类
我们可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性;使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true
最顶层的原型对象:object.prototype object.prototype最常用的两种方法(tostring 、valueof)
隐式原型 (proto):隐式原型的作用是用来构成原型链,实现基于原型的继承
显式原型(prototype):用来实现基于原型的继承与属性的共享