JavaScript构造函数

一、什么是构造函数

 

构造函数(Constructor)的创建方式和普通函数一样。但通常首字母进行大写,用于和普通函数区分。

 

但是当一个函数创建好以后,我们并不知道它是不是构造函数(即使函数名的首字母为大写)。只有当它以 new 操作符来调用的时候,我们才能说它是一个构造函数。

//创建一个普通函数
function dog(){
    console.log('这是一个普通函数')
}
//普通函数的调用
var d=dog();
console.log(d);
//创建一个Person类的构造函数
function Person(name, age) {
   this.name = name;
   this.age = age;
}
//构造函数的调用
var p=new Person('李于',45);
console.log(p)

二、构造函数的作用

 

构造函数的作用是新建实例对象,并且给实例对象内的成员(属性或方法)赋值。

 

在我们需要创建大量同一类型的对象时,这些对象都具有某些属性或方法,如果我们直接通过变量加字面量的形式进行赋值,会产生很多重复的代码。而当我们将这些对象抽象为一个类时,创建一个构造函数,就可以实现代码复用。

 

举个例子,我们要录入高中三班中每一位同学的个人信息,那么我们可以创建一些对象,比如:

var c1={name:'li',age:16,hobby:'dancing',gender:'男'}
var c2={name:'xili,age:17,hobby:'xili',gender:'女'}
var c3={name:'jy',age:20,hobby:'cjy',gender:'男'}

像上面这样,我们可以把每一位同学的信息当做一个对象来处理。但是,我们会发现,我们重复地写了很多无意义的代码。比如 name、age、hobby、gender 。如果这个班上有45个学生,我们得重复写45遍。

这个时候,构造函数的优势就体现出来了。我们发现,虽然每位同学都有 name、gender、hobby这些属性, 但它们都是不同的,那我们就把这些属性当做构造函数的参数传递进去。

我们就可以创建以下的函数:

function Person(name,age,hobby,gender){
       this.name=name
       this.age=age
       this.hobby=hobby
       this.gender=gender
} 
//当创建函数以后, 我们就可以通过 new 关键字调用,也就是通过构造函数来创建对象了。
var c1=new Person('li','16','dancing','男');
var c2=new Person('xili','17','xili','女')
var c3=new Person('jy','20','cjy','男')
//.....
//封装构造函数的过程会比较麻烦,但一旦封装成功,我们再创建对象就会变得非常轻松,这也是我们为什么要使用构造函数的原因。

三、构造函数的执行流程

  1. 立即创建一个新的对象
  2. 将新建的对象设置给函数中的this,在构造函数中可使用this来引用新建的对象
  3. 逐行执行函数中的代码
  4. 将新建的对象作为返回值返回
//写一个构造函数
function Person(name,age,gender){
//1.会帮我们创建一个对象
//2.obj对象 给到了 this(就是this指向obj)
//3.通过this给obj对象赋值

/*
* 在构造函数内部创建的sayName方法
* -每执行一次就会创建一个新的方法
* -这样对于同样的方法多次创建占用空间,损耗性能
*/
// this.sayName = function () {
// console.log(this.name);
// }
// 将sayName放在全局作用域中定义就不会多次创建

this.name=name
this.age=age
this.gender=gender
//4.帮我们返回obj对象
}

 

 

四、instanceof
  使用instanceof可以检查一个对象是否是一个类的实例。语法: 对象 instanceof 构造函数。如果是类的实例,则返回true,否则返回false。例如:

// 判断shier是不是Person的实例
console.log(shier instanceof Person);

 

注意:所有对象都是object的后代,所以任何对象和object做instanceof检查都会返回true。

// 判断shier是不是Object的实例
console.log(shier instanceof Object);

 

五、小结:

一个构造函数可以通过new创建多个实例对象

创建构造函数时,里面的属性和方法前必须加this

构造函数不需要return 就可以返回结果



 

posted @ 2022-09-29 10:32  偷熊计划  阅读(35)  评论(0编辑  收藏  举报