构造函数
构造函数就是通过new关键字去调用的函数,构造函数是特殊的函数,他的首字母需要大写,他的主要作用主要是为成员变量赋初始值。
大家都知道构造函数很方便,但是他也有一个问题,就是浪费内存。当我们通过构造函数去创建一个方法(复杂数据类型),它就会单独开辟一个内存空间,所以当我们创建对象时,不仅要为对象创造一个内存空间,还要为每个对象创建单独的内存空间,这就造成了内存浪费。所以我们引入了原型。
原型对象
构造函数通过原型分配的函数是所有对象所共享的
每一个构造函数都有一个prototype属性,指向另一个对象,注意:这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有.
我们可以将那些不变的方法,直接定义在prototype对象上,这样,所有对象的实例就可以共享这些方法.
由此,将公共方法定义到原型中,就只需要一个内存空间,就不会造成内存浪费。
对象原型
构造函数的每一个对象都可以通过属性_ _proto_ _去指向 构造函数的原型对象prototype
在这里我们做一个实验,看看对象的_ _proto_ _是否等于构造函数的prototype
我们可以看到返回值为true
查找规则
首先看自己对象本身有没有这个方法 有的话 执行自己的
如果没有 就去原型对象查找 找到就可以执行
原型链
既然我们了解了原型,那原型链理解起来就会很简单,我们的对象的_ _proto_ _ 指向构造函数的prototype,那么问题来了,构造函数的原型对象prototype的_ _proto_ _指向的是谁呢?
我们log输出一下就知道了
由此我们得知原型对象prototype的_ _proto_ _指向的是object.prototype,那我们通过object.prototype._ _proto_ _继续向上找呢?
我们可以看到返回的是null。
通过这种向上寻找形成的链,我们就叫做原型链。