reactjs - 如果它没有在构造函数中绑定 this,为什么它在反应组件方法中解析为 undefined 而不是 window/global-env
问题描述
只是描述为标题。
我得到了如何解决这种情况的答案 -this
指undefined
。
但没有答案告诉我为什么this
指undefined
.
在我看来,this
将指window/global-env
它是否未隐式或显式指定。
当然this
会在undefined
的时候strict-mode
。
解决方案
这是在运行时确定的,根据代码,它可能会有所不同。
这是
- 在运行时确定,当一个函数被调用时
- 取决于函数的调用方式,而不是函数的定义位置
- 对对象的引用。
- 将永远是一个对象
- 全局(this)在严格模式下不可用
示例 1:这=window
var name = 'Global';
var callName1 = function() {
var name = 'Peter';
console.log('--- From callName1 ----');
console.log(this.name);
//console.log(this);
callName2();
}
var callName2 = function() {
var name = 'Jane';
console.log('--- From callName2 ----');
console.log(this.name);
//console.log(this);
}
callName1();
var execute = function(fn) {
var name = 'Mary';
console.log('--- From execute ----');
console.log(this.name);
//console.log(this);
}
execute(callName2);
示例 2:在严格模式下不可用
'use strict';
var name = 'Global';
var callName1 = function() {
var name = 'Peter';
console.log('--- From callName1 ----');
console.log(this.name);
console.log(this);
}
callName1();
示例 3:使用方法调用检查this
var name = 'global';
var obj = {
name: 'James Obj1',
func: function() {
console.log('--- From func ----');
console.log(this.name);
console.log(this); // this reference obj1
}
}
obj.func()
var obj2 = {
name: 'Jame Obj2',
func: obj.func // this reference obj2, but the function is defined in obj1
}
obj2.func()
var obj3 = {
name: 'Kane Obj3',
obj4: {
name: 'Mary Obj4',
func: function () {
console.log('--- From obj4 ----');
console.log(this.name);
console.log(this); // this reference obj4
}
}
}
obj3.obj4.func()
使用() => {}
函数this - 是词法绑定的。这意味着它使用this
来自包含箭头函数的代码。
推荐阅读
- python - 盈透证券 accountSummary() 更改价值货币
- php - 如何从数组中提取百分比
- python - 使用分类列根据数组对数据框进行排序
- javascript - 如何获得点击 Razorpay 支付失败按钮的失败响应?
- google-cloud-platform - BigQuery - 预定查询更新通知电子邮件
- javascript - D3.js 折线图 - 将网格添加到背景并制作折线
- react-native - App() 的重新渲染会在导航中自动重新渲染屏幕吗?
- firebase - 每次我使用futurebuilder登录时从firestore中检索用户名并输入appbar标题
- python - ModuleNotFoundError:RStudio 中没有名为“pandas”的模块
- sql - 使用变量作为表名动态sql不工作选择到表中