ES6 明确函数的双重用途

明确函数的双重用途

在很多情况下当我们调用一个函数时,需要new来调用而不用new来调用的话会出现很多问题,比如this指向问题等等。而在以前的语法当中我们无法判断其调用时是否使用new来调用,一般情况下我们通常用if判断它原型链上的指向是否有自身来判断,不但有些麻烦而且还并不是特别完善。

所以ES6提供了一个特殊的API,可以使用该API在函数内部,判断该函数是否使用了new来调用


	new.target 
	//该表达式,得到的是:如果没有使用new来调用函数,则返回undefined
	//如果使用new调用函数,则得到的是new关键字后面的函数本身
	

	function Person(firstName, lastName) {
	    //判断是否是使用new的方式来调用的函数
	
	    // //过去的判断方式
	    // if (!(this instanceof Person)) {
	    //     throw new Error("该函数没有使用new来调用")
	    // }
	
	    if (new.target === undefined) {
	        throw new Error("该函数没有使用new来调用")
	    }
	    this.firstName = firstName;
	    this.lastName = lastName;
	    this.fullName = `${firstName} ${lastName}`;
	}
	
	const p1 = new Person("袁", "进");//此时由于正常调用所以并没有任何问题
	console.log(p1)
	
	
	
	const p2 = Person("袁", "进");
	//在这里无论是直接调用还是通过call来改变this指向,所返回的数据都是undefined
	console.log(p2);
	
	const p3 = Person.call(p1, "袁", "进")//同理
	console.log(p3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值