规范中是否有为类定义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
答案 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
``
中写了字符串。我这样做是为了指定多行字符串。use and placement of white space, line terminators, and semicolons within the representation String is implementation-dependent
。但是现在所有的JS实现都保持不变。