1,构造函数

构造函数模式的目的是为了创建一个自定义的类,并创建这个类的实例。
构造函数本身也是一个普通函数,创建方式也和普通函数没有区别,但构造函数习惯上首字母大写,
调用方式也不一样,普通函数直接调用,构造函数通过new关键字调用。

1
2
3
4
5
6
7
8
9
function Person(name, age){
this.name = name;
this.age = age;
putName = function(){
console.log(this.name)
}
}
var per = new Persson("Daisy", 21)
//console.log(per)

每次创建一个Person构造函数,在Person构造函数中,为每一个对象都会添加一个putName方法,也就是说,
构造函数每次执行都会创建一个新的putName方法,执行一千次就会创建一千个新方法,而这一千个新方法都是一样的,
为什么不把他单独放在同一个地方呢?并且还能让所有的实例能访问到?
这就需要原型(prototype)

2,原型

JavaScript的所有对象都包含一个 proto 内部属性,这个属性所对应的就是自身的原型。
JavaScript的函数对象除了有 proto 之外,还有一个prototype属性,当函数对象作为构造函数创建实例时,
该prototype属性值将被作为实例对象的原型 proto

原型链

当对象调用自身不存在的方法或者属性的时候,就会去自己关联的prototype对象上找,如果没找到,就会去该prototype关联的
prototype找,以此类推,直到找到属性或者方法或undefined为止,从而形成了“原型链”

3,构造函数,原型之间的关系

链接:https://cdn.jsdelivr.net/gh/Daisy-1999/CDN/blog/prototype.6gsz5mbnhe00.png