This!

先写下结论:this的指向,是在调用函数时根据执行上下文动态所确定的。
 
① 在函数体中,简单调用该函数时(非显式/隐式绑定下), 严格模式下this绑定到undefined,否则绑定到全局对象window/global;
 
② 一般构造函数new调用,绑定到新创建的对象上;
 
③ 一般由call/apply/bind方法隐式调用,绑定到指定参数的对象上;
 
④ 一般由上下文对象调用,绑定在该对象上;
 
⑤ 箭头函数中,根据外层执行上下文绑定的this决定this指向。
 
 
在执行函数时,如果函数中的this是被上一级的对象所调用,那么this指向的就是上一级的对象;否则指向全局环境。
 
 
构造函数中情况较为不一样:
 
function Foo () {
 
    this.user = 'name'
 
    const o = {}
 
    return o
 
}
 
const instance = new Foo()
console.log(instance.user)
 
这次打印将会输出undefined,此时instance是返回的空对象
 
 
function Foo () {
 
    this.user = 'names'
 
    return 1
 
}
 
这次将会输出names,也就是说这次输出时返回的是木变对象的实例this
 
结论:如果构造函数中显式返回一个值,且返回的是一个对象,那么this就指向这个返回的对象;如果返回的不是一个对象,饭吗this仍然指向实例。
 
 
 
this优先级相关
 
我们常常把通过call、apply、bind、new对this绑定的情况称为显式绑定;根据调用关系确定的this指向称为隐式绑定
 
 
 
posted @   李不懂。  阅读(117)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示