构造函数和原型的关系

136 阅读1分钟

构造函数

可以理解为构造函数是相对而言的,有变量new这个函数,那这个函数就是这个变量的构造函数。如:

//如果没人调用fun的话,他就是个普通函数
 function fun(name,age){
     this.name = name;
     this.age = age;
    console.log('我是调用我的变量的构造函数')
}

let variable = new fun('zhangsan','18')
//这时候就可以说fun是variable的构造函数

原型

给构造函数添加共享的属性和方法。原型挂载在构造函数里,要先有构造函数,才会有原型。

为什么要有原型呢?

因为构造函数在每次被实例的时候方法都会被重新分配内存,所以需要解决内存问题,而且实例对象还有需要共用构造方法的时候。

//还以这个为例
 function fun(name,age){
     this.name = name;
     this.age = age;
     this.method = function()
     { return "构造函数下的方法" }
}

// 构造函数.原型下添加方法 
fun.prototype.Exhibition = function()
{ return this.name+" "+this.age; }

let zhangsan = new fun('zhangsan','18')
let lisi = new fun('lisi','18')
console.log(zhangsan.method===lisi.method); // false
//可以看到两个实例下的方法不相等
console.log(zhangsan.Exhibition===lisi.Exhibition); // true
//相等了,这就是原型的作用