什么是Javascript(ES6)中'静态获取'的含义?

Ces*_*uez 18 javascript ecmascript-6

我现在需要在Javascript中看到这样的表达式的含义

static get is() { return "custom-element"; }
Run Code Online (Sandbox Code Playgroud)

我想这static可能有类似于Java或C++的行为,但我需要有关这些语法的更多信息.

Sur*_*tta 21

你是对的.它们非常接近任何其他面向对象的编程语言,如C++和Java

一切都记录在案.这是您正在查看的静态方法,get是getter您要获取的属性或对象的get.

如果你看看探索静态

静态方法.静态属性(或类属性)是Foo本身的属性.如果使用static为方法定义添加前缀,则创建一个类方法:

> typeof Foo.staticMethod
'function'
> Foo.staticMethod()
'classy'
Run Code Online (Sandbox Code Playgroud)

静态属性:

我不能想到一个很好的例子,而不是现在在脑海中给出的一个很好的例子.我在这里粘贴必不可少的部分.

class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
}

Point.ZERO = new Point(0, 0);
Run Code Online (Sandbox Code Playgroud)

您可以使用Object.defineProperty()来创建只读属性,但我喜欢赋值的简单性.

其次,您可以创建静态getter:

class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    static get ZERO() {
        return new Point(0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以获得可以阅读的属性Point.ZERO.在第一种情况下,每次都返回相同的实例.在第二种情况下,每次都返回一个新实例.

  • 我会对第一句话非常小心.语法类似,这就是所有共同点.JS中的`class`只是带有`prototype`的构造函数的语法糖. (2认同)
  • 这一切都是正确的,但假设JS表现得像Java一样危险.例如,在JS中,`static`属性由"扩展"原始函数的函数继承,而继承自`Foo.prototype`的对象也不会像使用Java语法一样访问`static`方法.我发现使用`class`语法的人不会花时间学习"老式"的做事方式,他们最终会以不恰当的方式使用类. (2认同)