this 指向
this 在字面量是这个的意思
定义:this是一个使用在作用域内部(函数/全局)的关键字,
全局很少用,大部分是在函数内部使用
指向:
全局:this => window
函数内部使用:不管函数如何定义,只看函数的调用,箭头函数除外
->普通调用/直接调用/全局调用
+ 函数名()
->对象调用
+ xxx.函数名() Math.random() -> .点前面是谁就是谁
->定时器处理函数
+ setTimeout(function () {},0); this 指向window
+ setInterval(function () {},0); this 指向window
->事件处理函数
+ xxx.onclick = function() { } this 指向事件源(绑定在谁身上的事件)
+ xxx.addEventListener('click',function () {}) this 指向事件源(绑定在谁身上的事件)
->自执行函数
+ (function () {})() this 指向window
强行改变this指向
+ this有其本身的指向性
+ 不管你本身指向谁,我让你指向谁,就可以指向谁
+ 三个方法
1.call()
2.apply()
3.bind()
1.call()
+ 使用方法,就直接连接在函数名后面使用
+ 语法:
-> fn.call()
-> obj.fn.call()
+ 参数:
-> 第一个参数,就是函数内部的 this 指向
-> 第二个参数,就是依次给函数传递参数
+ 特点:会立即执行函数(不适合事件处理函数,不适合定时器)
+ 作用:伪数组借用数组方法
2.apply()
+ 使用方法,直接连接在函数后面使用
+ 语法:
-> fn.apply()
-> obj,fn.apply()
+ 参数:
-> 第一个参数,函数内部的this指向
-> 第二个参数, 是一个数组或者是伪数组
+ 特点:
-> 会立即执行函数
+ 作用:
-> 可以以数组的形式给某些功能函数传参
3.bind()
+ 使用方法,直接在函数名后面连接
+ 语法:
-> fn.bind()
-> obj.fn.bind()
+ 参数:
-> 第一个参数,就是函数内部的 this 指向
-> 从第二个参数开始,依次给函数传递参数
+ 特点:
-> 不会立即执行函数,返回一个新函数,一个this指向已经改变好的函数
+ 作用:
-> 一般用于改变事件处理函数或者定时器函数的this指向