JavaScript的类:toString()方法

时间:2015-01-09 17:00:01

标签: javascript ecmascript-6

规范中是否有为类定义toString()方法的内容?

例如,让我们说我定义了这个类:

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

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

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

或者也许是构造函数,匿名:

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

或者也许是构造函数,但它的名字是:

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

或者只是班级名称:

Foo

1 个答案:

答案 0 :(得分:3)

实际上在ES6中,“类”只是一个功能。因此,要了解toString对所谓“类”的行为,您必须查看toString() specification for function。它说:

  

字符串表示必须具有FunctionDeclaration FunctionExpression,GeneratorDeclaration,GeneratorExpession,ClassDeclaration,ClassExpression,ArrowFunction,MethodDefinition或GeneratorMethod的语法,具体取决于对象的实际特征。

所以例如'toString()'用于下一个类:

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

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

toString()方法将返回字符串:

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类。