this指向问题:用箭头函数替代函数绑定,好像效果也一样,还省敲了函数绑定的代码

来源:2-4 自由编程

Raznov

2020-03-20 00:39:56

import React, { Component, Fragment } from 'react'

class Counter extends Component {
	constructor(props) {
		super(props)
		this.state = {
			number: 1
		}
		// this.add2 = this.add2.bind(this)
	}

	// add2() {
	// 	let number = this.state.number
	// 	number += 2
	// 	this.setState({ number })
	// }

	// 箭头函数的this指向父作用域
	add2 = () => {
		let number = this.state.number
		number += 2
		this.setState({ number })
	}
	
	render() {
		return (
			<Fragment>
				<button onClick={this.add2}>点击,数字+2</button>
				<p>{this.state.number}</p>
			</Fragment>
		)
	}
}

export default Counter

那么用箭头函数可以完美替代函数绑定吗?二者在渲染、性能上应该没有什么差别吧?

写回答

1回答

好帮手慕星星

2020-03-20

同学你好,虽然结果上实现了。但是两种定义方式还是有区别的:

1、普通方式中输出this看看

http://img.mukewang.com/climg/5e743e3f096d5a2207660533.jpg

普通函数被定义为类的原型方法,通过function创建的原型方法:

http://img.mukewang.com/climg/5e743e540984f55209610694.jpg

2、箭头函数定义的方式输出this看看

http://img.mukewang.com/climg/5e74402d09159b1406540256.jpg

箭头函数被定义为类的实例方法,通过箭头方法创建的实例方法

http://img.mukewang.com/climg/5e74405e09eeec8e09630631.jpg

一般推荐将方法定义在原型上,所以使用普通函数定义的方式就好。

祝学习愉快!

0

0 学习 · 10739 问题

查看课程