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这个

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



