一、构造函数、实例化对象
构造函数模式的目的就是为了创建一个自定义类,并且创建这个类的实例。构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立的。
构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。另外就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
function后面的方法名 Person 就是一个构造函数,一般首字母大写,需要new实例化;
new之后的对象就是实例化对象,此处的person1,person2就是实例化对象;
二、构造器constructor
每个对象都有一个constructor属性,指向这个对象所在的构造函数,如下:
三、原型prototype
每当定义一个函数数据类型(普通函数、类)时候,都会自带一个prototype
属性,这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值。
原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。
Person.prototype 是Person的原型"对象",所以这个对象也有constructor属性,同样指向Person,所以
可得三者是等同关系,并且都等于Person:
四、原型链__proto__
每一个对象数据类型(普通的对象、实例、prototype
......)也天生自带一个属性__proto__
,指向创建它的构造函数的原型
如下:
Person本身是一个构造"函数",那么创建它的构造函数就是一个Function,所以
Person.prototype 是一个原型"对象",那么创建它的构建函数就是一个Object,所以
换个构造函数名字一样的道理:
最后来个例子: