给出一个简单的类
class Foo {
constructor(x) {
if (!(this instanceof Foo)) return new Foo(x);
this.x = x;
}
hello() {
return `hello ${this.x}`;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在没有new关键字的情况下调用类构造函数?
用法应该允许
(new Foo("world")).hello(); // "hello world"
Run Code Online (Sandbox Code Playgroud)
要么
Foo("world").hello(); // "hello world"
Run Code Online (Sandbox Code Playgroud)
但后者失败了
Cannot call a class as a function
Run Code Online (Sandbox Code Playgroud) 在JavaScript中使用构造函数创建类时,是否可以在以后重新定义类的方法?
例:
function Person(name)
{
this.name = name;
this.sayHello = function() {
alert('Hello, ' + this.name);
};
};
var p = new Person("Bob");
p.sayHello(); // Hello, Bob
Run Code Online (Sandbox Code Playgroud)
现在我想像这样重新定义sayHello:
// This doesn't work (creates a static method)
Person.sayHello() = function() {
alert('Hola, ' + this.name);
};
Run Code Online (Sandbox Code Playgroud)
所以当我创建另一个时Person,sayHello将调用新方法:
var p2 = new Person("Sue");
p2.sayHello(); // Hola, Sue
p.sayHello(); // Hello, Bob
Run Code Online (Sandbox Code Playgroud)
编辑:
我意识到我可以发送一个像"Hello"或"Hola"这样的参数sayHello来完成不同的输出.我也意识到我可以简单地为p2分配一个新函数,如下所示:
p2.sayHello = function() { alert('Hola, ' + this.name); };
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是否可以重新定义类的方法,所以新的实例Person …