使用es6类自我调用类实例化

时间:2018-02-20 02:42:29

标签: javascript function class

我正在尝试使用Simple “Class” Instantiation,其中一个类可以返回自身的new版本并返回其自身的实例化版本。

function User(first, last){
  if ( this instanceof User ) {
    this.name = first + " " + last;
  } else
    return new User(first, last);
}

我正在尝试查看es6类是否可行。

class User {
  constructor(first, last){
    if ( this instanceof User ) {
      this.name = first + " " + last;
    } else
      return new User(first, last);
    }
  }  
}

但是我遇到了这个错误:

  

TypeError:类构造函数如果没有,则无法调用用户   '新'

我想知道是否有办法绕过它。

2 个答案:

答案 0 :(得分:3)

  

我想知道是否有办法绕过它。

嗯,不。我认为这是件好事。与前一种方法相比,使用ES6 Class的优点是它实际上就像一个类,没有怪癖和混乱。如果你把理由做成你想做的事,请参考你引用的文章:

  

首先是新的JavaScript程序员将遇到的问题。在一个   快速观察上面的代码并不是很明显的   该函数实际上是要实例化的东西......

     

其次,如果要实例化一个类风格的函数,那么   不是,它最终会污染当前的范围...

这些是ES6旨在解决的一些问题。所以,现在,新的程序员进来,尝试以错误的方式调用类,并且繁荣:TypeError。没有污染范围,没有意外行为。

答案 1 :(得分:0)

您在第5行上犯了一个错误:

class User {
  constructor(first, last){
    if ( this instanceof User ) {
      this.name = first + " " + last;
    } else // bad line
      return new User(first, last);
    }
  }  
}