JavaScript进阶(二十九): 走近 es6 之 new(1)

1 function Person( uName ){
2 if ( this instanceof Person ) {
3 this.userName = uName;
4 }else {
5 return new Person( uName );
6 }
7 }
8 Person.prototype.showUserName = function(){
9 return this.userName;
10 }
11 console.log( Person( ‘ghostwu’ ).showUserName() );
12 console.log( new Person( ‘ghostwu’ ).showUserName() );


在`es6`中,为了识别函数调用时,是否使用了`new`关键字,引入了一个新的属性`new.target`:


1. 如果函数使用了`new`,那么`new.target`就是构造函数;
2. 如果函数没有使用`new`,那么`new.target`就是`undefined`;
3. `es6`的类方法中,在调用时候,使用`new`,`new.target`指向类本身,没有使用`new`就是`undefined`;



1 function Person( uName ){
2 if( new.target !== undefined ){
3 this.userName = uName;
4 }else {
5 throw new Error( ‘必须用new实例化’ );
6 }
7 }
8 // Person( ‘ghostwu’ ); //报错
9 console.log( new Person( ‘ghostwu’ ).userName ); //ghostwu


使用`new`之后,`new.target`就是Person这个
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值