一个前端经典的面试题: new关键词

前言

在前端的面试中,有一道经典的题: 在new对象的过程中发生了什么
在javascript中, 我们总是称用于创建对象的函数为构造函数。 其实,没有构造函数,只有函数的构造调用,构造函数名称的首字母大写只是一种标识,并没有任何实际作用

code

const proto = {
    sayHello() {
        console.log(`名字: ${this.name}; 年龄: ${this.age}`)
    }
}

function Person() {
    const _this = this
    const proEqual = Reflect.getPrototypeOf(this) === proto
    this.name = 'zhangsan'
    this.age = 18
}


Person.prototype = proto

const zhangsan = new Person()

执行结果如下

在这里插入图片描述

从执行结果可以看出: 在进入函数之前, new关键创建了一个空对象,并把空对象的原型关联到构造函数的原型上
而函数只是起到了把属性加入到对象中

函数返回值的影响

  1. 当返回值为引用类型时

在这里插入图片描述

引用类型会代替new的对象

  1. 当返回值为基本类型时

返回值是new关键字生成的对象

以上有兴趣的可以自行尝试

总结

由此我们可以得出结论

new: 初始化对象, 设定对象的原型, 过滤构造函数的返回值,返回过滤后的值
函数: 为对象添加属性或方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值