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