js中new关键字(构造函数)

工厂函数

  • 问题:想要批量的创建很多个对象,大量的会导致代码冗余,维护不方便
  • 实现:
let p1 = {
  name:'小明',
  age:30
}
let p2 = {
  name:'小李',
  age:30
}
  • 解决:
    1. 封装函数:
function createPerson(name,age){
    let p={}
    p.name = name
    p.age = age
    return p
  }
  
  let p1 = createPerson('小明',30)
  let p2 = createPerson('小李',30)

这个函数就叫工厂函数,函数代表的是数据类型、工厂代表作用。工厂函数还是一个函数,前缀代表该函数的功能作用,顾名思义,工厂函数就是一个批量创建对象的函数
但是这种写法很少见,因为有另一种函数能同样实现且代码更少

构造函数

作用与工厂函数一致,代码量更少。
使用new来调用的函数,只有通过new来调用的函数,才是构造函数,才能简写

function CreatePerson(name, age) {
    this.name = name
    this.age = age
}
let p1 = new CreatePerson('小明', 30)
let p2 = new CreatePerson('小张', 20)
console.log(p1, p2)

new关键字的作用:

  1. 创建空对象{}
  2. this指向这个空对象 this={}
  3. 给对象赋值
  4. 返回这个对象 return this
    所以,不加new不是构造函数,返回undefined
    验证构造函数:
function fn(){
}
let res1=fn() //普通函数
let res2=new fn() //构造函数
console.log(res1,res2 ) //undefined  {}

在Haskell语言中,构造函数甚至被限制为首字母必须大写。由于构造函数(类型和值)在语言中非常重要,这种对大写标识符的简单限制使人们更容易看到一段代码中发生了什么。在某种程度上,大写字母弥补了语言中其他语法噪音的不足,有助于读者阅读。
所以在js中,最好也遵守这个约定,同时,在使用的时候,也提醒我们,不要忘记在前面加上new关键字
可以去菜鸟教程中看到,所有的内置对象,首字母都是大写的在这里插入图片描述

补充

在构造函数中主动return,如果是值类型,则依然返回this。主动返回引用类型,如{name:'小明'}[1,2,3],会覆盖new的返回。所以,如果不想挨骂,不要这么写,不排除有的面试考验你,可能会考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值