构造函数

1.创建对象的方式
  let obj1={}      //对象字面量
  let obj2=new Object()

  工厂模式(优点:避免产生大量重复代码   缺点:不能识别对象的类型)

  构造函数()

前2种方式 都是通过同一个接口创建很多对象,某种意义上会产生大量重复代码。

 

2.工厂模式

function creatObj(name,num,job){
   var obj=new Object();
   obj.name=name;
   obj.num=num;
   obj.job=job;
   obj.getName=function(){
      console.log(this.name)
   }
   return obj      
}        

var obj1=creatObj('aa',23,'work1')   
//{name: 'aa', num: 23, job: 'work1', getName: ƒ}

var obj2=creatObj('bb',18,'work2')
{name: 'bb', num: 18, job: 'work2', getName: ƒ}

obj1==obj2 //false

优点:避免了重复实例化对象带来的大量重复代码的问题。

缺点:不能识别出对象的类型

 

3.构造函数(原生js提供的构造函数:Array Object Date )

定义:当任意一个普通函数用于创建同一类型的对象时,他就被称作构造函数

通过constructor来区分数据类型的,通过instanceof操作符来检测对象类型

function Fn1(name,num,job){
   this.name=name;
   this.num=num;
   this.job=job;
   this.getName=function(){
      console.log(this.name)
   }
}        

var obj1=new Fn1('aa',23,'work1')   
var obj2=new Fn1('bb',18,'work2')
var arr=new Array(1,2,3)
//Fn1 {name: 'aa', num: 23, job: 'work1', getName: ƒ} 
//
Fn1 {name: 'bb', num: 18, job: 'work2', getName: ƒ}
//(3)[1,2,3]

obj1.constructor==Fn1 //true
obj2.constructor==Fn1 //true
arr.constructor==Fn1 //false
obj1 instanceof Fn1   //true
obj2 instanceof Fn1 //true
obj1 instanceof Object //true

特点:

  • 没有显示的创建一个对象
  • 首字母大写,直接在this对象上进行属性和方法额设置
  • 没有return语句 如果要返回 也最好返回this或者非对象类型的值

作用:

初始化对象,构造函数就是在为初始化对象添加属性和方法

调用方式:

  • 通过new操作符来调用
  • 可以像普通函数一样调用
  • 可以用call apply 等方法来调用
var obj1=new Fn1('aa',23,'work1');
obj1.getName()    //aa


Fn1('bb',13,'work2');
window.getName()   //bb

var obj3={};
Fn1.call(obj3,'cc',15,'work3');
obj3.getName()    //cc

 

 

4.实例化

定义:实例化对象就相当于由抽象到具体的过程,这个过程就叫实例化


通过new操作符来实例化一个构造函数的过程

  • 创建一个新对象
  • 将构造函数的作用域赋给新对象,所以构造函数中的this指向了新的实例对象
  • 执行构造函数中的代码,这个过程也就是为这个实例化对象添加属性和方法
  • 返回新对象

 

posted @ 2022-06-04 22:56  诉诉飞飞  阅读(63)  评论(0编辑  收藏  举报