相关疑难解决方法(0)

ES6:没有new关键字的调用类构造函数

给出一个简单的类

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 constructor instance ecmascript-6

71
推荐指数
7
解决办法
6万
查看次数

是否可以重新定义JavaScript类的方法?

在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 …

javascript class

3
推荐指数
2
解决办法
8174
查看次数

标签 统计

javascript ×2

class ×1

constructor ×1

ecmascript-6 ×1

instance ×1