彻底弄懂js中的this指向
程序员文章站
2022-03-29 08:34:12
...
首先我讲两点重要的规则,基本一切都是基于这个
1.this在函数中的指向永远由最后调用这个函数的东西决定,谁调用就指向谁
2.如果出现这一条,则第一条无效,即函数后出现.bind(A),那么无论谁最后调用这个函数,这个函数中的this都将指向A,因为这个函数在声明的时候,this就已经注定绑定成指向A了,不会再改了
接下来讲几种情况
就单单只讲一个react的吧,其他的以后再说吧,对象,事件函数等等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>state</title>
</head>
<body>
<!-- 准备好一个“容器” -->
<div id="test"></div>
<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom,用于支持react操作DOM -->
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<!-- 引入babel,用于将jsx转为js -->
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
//1.创建组件
class Weather extends React.Component{
//构造器调用几次? ———— 1次
constructor(props){
console.log('constructor');
super(props)
//初始化状态
this.state = {isHot:false,wind:'微风'}
//解决changeWeather中this指向问题,因为constructor中this指向实施
//那么现在就绑定,函数里的this就一直是实例,谁调用都不会再变,符合规则2
this.changeWeather = this.changeWeather.bind(this)
}
render(){
console.log('render');
//读取状态
const {isHot,wind} = this.state
return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h1>
}
changeWeather(){
//changeWeather放在哪里? ———— Weather的原型对象上,供实例使用
//由于changeWeather是作为onClick的回调,所以不是通过实例调用的,是直接调用,至于谁调用,谁调用就指向谁,而这里打印undefined,又是严格模式,说明本来是window调用的,因为只有本来指向window,在严格模式下才会变成指向undefined
//类中的方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
console.log('changeWeather');
console.log(this);
}
}
ReactDOM.render(<Weather/>,document.getElementById('test'))
</script>
</body>
</html>