简介

This

一、概念

1
2
3
4
5
6
7
8
9
let v = 1
let obj = {
v: 2,
fn: function() {
console.log(v)
}
}
let a = obj.fn
a() // 1

在对象内部的方法中访问对象内部的属性,js需要通过this机制来支持,this是和执行上下文绑定的

this相当于是隐式的提供了一个对象引用,需要关注的问题就是this的指向问题。

以下都是说的非严格模式下

二、this指向问题

1.默认是指向window对象

2.隐式绑定,谁调用就指向谁,对象调用,指向该对象;如果把对象的方法赋给一个全局变量,再调用,则指向window

3.显式绑定,call,apply,bind

4.new关键字修改指向

5.嵌套函数中的this不会从外层函数中继承

5.1.用self变量保存外层函数的this,通过作用域机制使嵌套函数内部可以使用外部的this

5.2.用箭头函数,箭头函数没有this,它里面写this要去外层作用域查找