![](/img/trans.png)
[英]Why Jest's toThrow won't work when create an instance of a ES6 class directly in the constructor?
[英]Why Defining A React Component Constructor the ES6 Way Won't Work?
我正在尝试将其转换为:
constructor () {
...
}
对此:
constructor = () => {
...
}
但这是行不通的。 您能否解释为什么不允许这样做? 是以某种方式危险吗?还是不允许构造函数为非静态的只是任意选择?
ES6类基本上只是围绕旧ES5原型继承的语法糖。 ES6中的constructor
函数类似于ES5中的函数本身。 例如:
class foo {
constructor () {
console.log('hello world');
}
}
等效于:
function foo() {
console.log('hello world');
}
您要尝试在类定义中使用的箭头功能还不是ecmascript的一部分,但是由于babel的编译器,您现在可以使用它们了。 babel的工作如下:
class foo {
boundFunction = () => {
console.log('bound');
}
}
变为:
function foo() {
this.boundFunction = () => {
console.log('bound');
}
}
请注意,babel将函数从类定义中移出并将其移至构造函数中。 这样,每次创建对象时,它都会获得自己的函数实例
但是,接下来我们来谈谈您的情况。 这将告诉巴别尔做什么?
class foo {
constructor = () => {
console.log('bound');
}
}
因此,从boundFunction
示例中,babel应该将该函数移至构造函数中,而从第一个示例中起,它也应该是构造函数。 这些是互斥的,所以babel给您一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.