当前位置:  开发笔记 > 编程语言 > 正文

在ES6中使用命名或未命名的类表达式有什么用?

如何解决《在ES6中使用命名或未命名的类表达式有什么用?》经验,为你挑选了2个好方法。



1> alexpods..:

对于类表达式,您可以在内部使用类名 ,但不能在类之外使用:

const Foo = class Self {
  static greetingPrefix() {
    return 'Hello, ';
  }

  greeting() {
    return Self.greetingPrefix() + 'World';
  }
};

const foo = new Foo();
console.log(foo.greeting()); // "Hello, World"


console.log(Self); // throws "Uncaught ReferenceError: Self is not defined"


@JaredSmith是的,类**属性**不是ES6的一部分.但是类**方法**(在示例中使用)是规范的一部分(参见[此处](http://www.ecma-international.org/ecma-262/6.0/#sec-14.5))

2> Paul S...:

使用以下代码

var car = class Car{ /* ... */ }

var carNew = new Car("ferrari"); 抛出错误,为什么?

Car因为您编写了一个类表达式,所以没有进入范围,类似于function函数表达式中使用

var foo = function Bar() {};
foo; // defined
Bar; // undefined

var carNew = new car("ferrari"); 工作,为什么?

出于与上述相同的推理,car标识符在您的范围中定义并指向类表达式


什么是命名或未命名的类表达式的使用[...]?

让我们function再看一遍.所以现在想一想,如果Bar没有在我们工作的范围内定义,它在哪里定义?

嗯,显然我们有foo.name === 'Bar',但我们也可以

var foo = function Bar() {console.log(Bar)};
foo(); // Bar logged, we see Bar === foo here

太棒了,所以我们可以Bar函数里面引用.

它完全相同class,我们可以Car类表达式本身引用,让我们做递归行为或复制静态引用实例等.

我添加了这样的引用,以便在下面的代码中轻松查看

var car = class Car {
    constructor(model) {
        this.model = model;
        this.foo = Car; // the big C Car that was ReferenceErroring outside
    }
};
var bar = new car();
console.log(bar.foo); // logs class Car (=== car)

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有