JavaScript使用new Function()时this的指向问题

先来看一段代码

function fun() {
    this.name = 'zhd'
}
let p = new fun()
console.log(p.name)

最终控制台打印出来的是zhd,这个我相信大多数人都是知道这个结果的,但问题是为什么会打印出zhd,或许很多人并不清楚里面的代码究竟做了什么操作,接下来我们讲讲其中的原理。

其实new Function()也属于JavaScript中调用一个函数的一种调用方式,只不过开发中我们很少会用到,使用new Function()调用函数的过程中会在函数内部自动帮我们生成一个新的对象obj,生成这个obj的过程中会自动把这个函数内部的this赋值给我们这个obj对象

function fun() {
	var obj = {}
	obj = this
    this.name = 'zhd'
    return obj
}

等到最后函数内的代码执行完后会自动把我们的这个this return返回出来,之后就可以通过p拿到这个函数返回来的这个对象obj,接着就可以拿到obj里面的name属性了。

用官方一点的话来说这个例子,我们通过一个new关键字调用一个函数时(构造器),这个时候this是在调用这个构造器时创建出来的对象,创建出来的对象 = this,这个this的绑定过程也称为new绑定。

前端菜鸟一枚,大佬勿喷…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值