繁体   English   中英

ES6:静态方法中的 this

[英]ES6: this within static method

假设我有两个这样的 ES6 类:

class Base {
    static something() {
        console.log(this);
    }
}

class Derived extends Base {
}

然后我打这样的电话:

Derived.something();

请注意,我正在通过子类调用在超类上定义的静态方法。

不会给我的错误。 它打印

[Function: Derived]

所以在静态方法中访问this似乎在这里工作。

我需要一个超类的所有子类的通用静态方法,并且我需要能够知道哪个子类正在调用这个方法。

现在我的问题是在静态方法中使用this是否合法。 我知道这些静态方法成为类方法,因此this自然会指向它们被调用的类对象。 (类对象是构造函数。)

但是我似乎找不到任何明确的资源表明 ES 规范允许这样做。

看起来是对 ES6 类的一个很好的介绍,但没有用static谈论this

在典型的情况下,只要函数不是箭头函数、绑定函数或类似的东西(在这种情况下它都不是something.method()任何something.method()调用中的this都会引用something

类继承,甚至 ES6,在这里并不真正相关。 您只需要知道您正在调用Derived.something() ,因此this将引用Derived

是的, this在静态方法中是合法的,应该这样做。

this在原型方法中指类实例, 在静态方法中指类构造函数,除非方法未从其原始上下文中绑定。

类似地, super在实例方法中指代父类原型, 在静态方法中指代父类构造函数

只要静态方法作为成员表达式被调用,例如

Derived.something();

const { something } = Derived;
something();

那么this将引用Derived Derived.something()something.call(Derived)相同,如果Derived.something存储到一个中间变量,因为本质上这就是评估具有嵌套调用表达式的成员表达式的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM