JS知识复习——this

216 阅读1分钟

首先我们需要知道 This 是什么?

从字面意思,this指的是当前;这个

对于Javascript来说它是一个指针型变量,它动态指向当前函数的运行环境。

This 指向如何去确定

this是在运行时进行绑定而不是在编写时

绑定方法

1. 默认绑定

function hello(){
    console.log(this) 
}
hello()//调用 this 指向为全局 Window{...}

函数的这种调用方式下 this 指向全局对象。

2. 隐式绑定

function hello(){
    console.log(this) 
}
let obj = {
        a:10,
        b:20,
        c:hello
    }
    
 obj.c() // 控制台打印结果为 :{a:10,b:20,c:f}

此时 this 的绑定规则称为隐式绑定,我们不能直接看出函数的调用位置,在调用时它实际调用位置在obj对象里,实际调用c时他的执行上下文对象就为obj对象,所以文中this指向obj

3. 显示绑定

function hello(){
    console.log(this) 
}
let obj = {
        a:10,
        b:20
    }
    
 hello.call(obj) // 控制台打印结果为 :{a:10,b:20}

我们利用 call 方法直接将 foo 函数内部的 this 指向了 obj 对象,这就是显式绑定。

4. New绑定

使用new创建函数
  • 创建一个新对象
  • 这个新对象会被执行原型连接
  • 新对象会绑定到函数调用的this
  • 如果函数没有返回其它对象,那么 new 表达式中的函数调用会自动返回这个新对象
function hello(text){
    this.text = text
}
let say = new hello('world')
    
 console.log(say.text) // 控制台打印结果为 world

上段代码我们使用 new 关键词调用了 hello 函数,这是 new 绑定规则。

总结

对于 this的复习就此先告一段落,对于MDN上在严格模式下的差异暂不做考究。