1

一、构造函数

构造函数是一个普通函数,创建方式与普通函数没有区别,不同的是构造函数习惯首字母大写。另外,调用方式不同,普通函数直接调用,构造函数则是通过new关键字调用。

图片描述

图片描述

每创建一个Person构造函数,在Person构造函数中,为每一个对象都添加了一个sayName方法,也就是说构造函数每执行一次就会创建一个新的sayName方法。这样就导致了构造函数执行一次就会创建一个新的方法,执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的,为什么不把这个方法单独放到一个地方,并让所有的实例都可以访问到呢?这就需要原型(prototype)。

二、原型

在javascript中,每一个函数数据类型都天生自带一个prototype属性,这个属性指向了函数原型对象,并且这个属性是一个对象数据类型的值。原型的属性或方法会被原型实例所共享。通过原型创建的原型实例是独立的。

图片描述

三、原型链

1.__proto__和constructor

每一个对象数据类型(普通对象、实例、prototype)也天生自带一个属性__proto__,属性值是当前实例所属类的原型(prototype)。原型对象中有一个属性constructor,它指向函数对象。

图片描述

2.何为原型链

万物皆对象,对象之间的继承关系,是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了原型链。

当我们访问对象的一个属性或方法时,它会先在对象自身查找,如果有则直接使用,如果没有就会去原型对象中查找,如果找到就直接使用。如果没有就去原型的原型中查找,找到为止。如果在Object原型中还没有找到,就返回undefined。

图片描述


追光者
7 声望0 粉丝