Call Class Constructor Without new Keyword in ES6
Given the class definition:
class Foo { constructor(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; } hello() { return `hello ${this.x}`; } }
It is not possible to directly call the class constructor without the new keyword. This is because classes in ES6 inherently have a constructor function that is invoked when the class is called.
Invoking a class without new results in an error:
Cannot call a class as a function
This error message clearly indicates that the class constructor can only be called with the new operator, which is required to create a new instance of the class.
To overcome this limitation, consider the following approaches:
function Foo(x) { this.x = x; this.hello = function() { return `hello ${this.x}`; } }
(new Foo("world")).hello(); // "hello world"
var FooWrapper = function(...args) { return new Foo(...args) }; FooWrapper("world").hello(); // "hello world"
The above is the detailed content of Can You Call a Class Constructor Without \'new\' in ES6?. For more information, please follow other related articles on the PHP Chinese website!