es6 class里面能写等号?

背景:用的webpack+react一系列

这是我在写react时发现的问题,class里面能写等号赋值?即竟有下面的第二种操作?我想知道第二种操作为什么不报错

import React, {Component} from 'react';

export default class RefundDetails extends Component {
  render(){
    return (
     <div>121221</div>
    );
  }
}
import React, {Component} from 'react';

export default class RefundDetails extends Component {
  render=()=>{
    return (
     <div>121221</div>
    );
  }
}

难道说,第一种是第二种的简写?

但是,我在babel在线编译发现,这会报错的

图片描述

另外浏览器里类似的声明类方法也会报错

图片描述

阅读 5.9k
7 个回答

实际上,这个算是个实验属性,可以理解为不用手动的在构造器上为函数手动绑定 this

就像下面的两种写法,一定 程度上算是等价的

class Example {
    doSomething = () => {
        //  ...
    }
}
class Example {
    constructor() {
        this.doSomething = this.doSomething.bind(this);
    }

    doSomething() {
        //  ...
    }
}

这是实验性的属性 参考

重新配置一下babel

那必须是可以的,只是需要配置babel。原来的函数类似:

function render(){
//do something
}

在es6中可以将函数进行简写:

render(){
//do something
}

render = ()=>{
 //do something
}

基本类型可以,干嘛赋一个 function 呢?

加了=就成了类的实例属性,不加的话是定义在原型上的方法

我看阮一峰的es6的书里面写过这种写法,只是一种提案可能在未来会实现,这是给类添加实例属性,之前只能在构造函数中,this.a = 123 现在可以直接a = 123

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题