素材牛VIP会员
es6 class里面能写等号?
 过***天  分类:JavaScript  人气:1152  回帖:7  发布于6年前 收藏

背景:用的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在线编译发现,这会报错的

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

 标签:react.jsjavascript

讨论这个帖子(7)垃圾回帖将一律封号处理……

Lv6 码匠
这***生 技术总监 6年前#1

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

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

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

    doSomething() {
        //  ...
    }
}
Lv6 码匠
zx***30 其它 6年前#2

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

function render(){
//do something
}

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

render(){
//do something
}

render = ()=>{
 //do something
}
Lv3 码奴
路***侠 JS工程师 6年前#3
let render =()=>{}
Lv3 码奴
记***6 JAVA开发工程师 6年前#4

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

Lv5 码农
雷***g 学生 6年前#5

这是实验性的属性 参考

重新配置一下babel

Lv5 码农
zh***23 PHP开发工程师 6年前#6

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

Lv3 码奴
li***09 软件测试工程师 6年前#7

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取