js中的构造函数

构造函数是什么,查看网上的讲解,大多数介绍的是为方便快速建立对象所设定的,跟原生函数并无多大区别,可是这只是浅显的介绍,构造函数是如何快速的构建新对象和原理如何,以及其中的this指向,这些问题,我们今天来一一解决:

1.目的

构造函数是干什么的?方便快速建立对象,又如何快速建立了对象?别急,我们通过个例子来详细看一看,

打个比方,现在有个业务需求,要求建立全班同学的一个对象表,怎么办?可能你的第一想法是每个人建立对象类型并且在当中添加键值对,这当然是正确的,我们来看看代码:
 

       let p1 = {
            age:20,
            name:"zhangsan",
            sex:"man"
        }
        let p2 = {
            age:20,
            name:"lisi",
            sex:"man"
        }
        let p3 = {
            age:20,
            name:"wangwu",
            sex:"woman"
        }
        let p4 = {
            age:20,
            name:"liliu",
            sex:"man"
        }

我们可以发现我们重复的写了代码,比如age,name,和sex,这个时候,就需要我们的构造函数出马了。

构造函数在技术上是常规函数。不过有两个约定:

1.它们的命名以大写字母开头。

2.它们只能由 “new” 操作符来执行

注意第二个要求,因为第一个要求只是默认的而不是强制,如果你看到了首字母大写的函数并不代表它一定是构造函数,但是如果你看见一个函数被new所调用,那它一定是构造函数

我们来看看如何使用构造函数来让这个问题变得简单

        function Username(age,name,sex) {
            this.age = age;
            this.name = name;
            this.sex = sex;
        }

        let p1 = new  Username(20,"zhangsan","man")

上面那个Username()就是构造函数,底下通过new 调用了这个函数,简单来看就是通过这个函数为声明的p1自动建立了一个对象并为其添加参数内的数据,这么说还是有些笼统我们从构造函数内部来看看这个流程:

        function Username(age, name, sex) {
            // this = {};(隐式创建)
            // 添加属性到 this
            this.age = age;
            this.name = name;
            this.sex = sex;
            // return this;(隐式返回)
        }
        let p1 = new Username(20, "zhangsan", "man")

我们添加了一些注释来解释这个流程,在我们创建构造函数时,先为this创建一个空的对象空间{},我们先将这里的this理解为一个具体的变量,但是并没有添加实际的值,注意这一步是隐式创建,我们在函数中是看不见这一步的,是js后台自动实现的,然后this.age = age 是什么意思,可能很多人都不理解,其实我们之前将this看成具体变量,这句话的意思很简单,就是为我们看做“变量”的this添加数据,具体的数据是什么,就是调用函数时所写的参数,我们再捋一遍,其实我们调用构造函数是函数内部所写的参数,就是this.age = age 右边的age,这点我们要特别注意,许多的讲解上并没有提到这一点,而这一点往往会让许多人困扰。

我们来接着看,之后函数隐式返回了this,怎么理解?很简单,跟普通函数一样,调用此函数时返回了一个完整的对象赋给p1,this此刻便指向p1,此时的p1即为

         let p1 = {
             age:20,
             name:"zhangsan",
             sex:"man"
         }

是不是跟上面我们手动创建的对象相同,可是我们省去了许多重复的代码,这也是使用构造函数的初衷。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值