JavaScript 的 类: toString() 方法

JavaScript's classes: toString() method

规范中是否有任何内容为 classes 定义了 toString() 方法?

例如,假设我定义这个 class:

class Foo {
  constructor() {
    console.log('hello');
  }
}

如果我调用 Foo.toString(),我不确定我是否会得到:

class Foo {
  constructor() {
    console.log('hello');
  }
}

或者构造函数,匿名:

function() {
  console.log('hello');
}

或者构造函数,但它被命名为:

function Foo() {
  console.log('hello');
}

或者只是 class 姓名:

Foo

实际上在 ES6 中 "class" 只是一个函数。因此,要了解 toString 对所谓的 "classes" 的行为方式,您必须查看 toString() specification for function。它说:

The string representation must have the syntax of a FunctionDeclaration FunctionExpression, GeneratorDeclaration, GeneratorExpession, ClassDeclaration, ClassExpression, ArrowFunction, MethodDefinition, or GeneratorMethod depending upon the actual characteristics of the object.

例如 'toString()' 下一个 class:

class Foo {
    // some very important constructor
    constructor() {
       // body
    }

    /**
     * Getting some name
     */
    getName() {
    }
}

toString() 方法将 return string:

Foo.toString() === `class Foo {
    // some very important constructor
    constructor() {
       // body
    }

    /**
     * Getting some name
     */
    getName() {
    }
}`;

PS

  1. 注意我把字符串写在反引号里 ``。我这样做是为了指定多行字符串。
  2. 规范还说 use and placement of white space, line terminators, and semicolons within the representation String is implementation-dependent。但是现在所有的JS实现都保持不变。
  3. 您可以在 Chrome Canary 中测试示例,它现在支持 ES6 classes。