一、指向

this 指向
+ 定义:
=> this 是一个使用再作用域内部的关键字
=> 全局很少用, 大部分是在函数内部使用
+ 指向:
=> 全局使用: window
=> 函数使用: **不管函数怎么定义, 不管函数在哪定义, 只看函数的调用(箭头函数除外)**
-> 普通调用(直接调用/全局调用)
+ 函数名(): this -> window
-> 对象调用
+ xxx.函数名(): this -> 点前面是谁就是谁
-> 定时器处理函数
+ setTimeout(function () {}, 0): this -> window
+ setInterval(function () {}, 0): this -> window
-> 事件处理函数
+ xxx.onclick = function () {}: this: 事件源(绑定再谁身上的事件)
+ xxx.addEventListener('', function () {}): this: 事件源
-> 自执行函数
+ (function () {})(): this -> window

二、改变this指向

改变 this 指向
+ this 有他本身的指向性
+ 不管你本身指向哪里, 我让你指向谁, 你就指向谁
+ 三个方法
1. call()
2. apply()
3. bind()

1. call()
+ 使用方法, 就直接连接再函数名后面使用
+ 语法:
-> fn.call()
-> obj.fn.call()
+ 参数:
-> 第一个参数, 就是函数内部的 this 指向
-> 第二个参数开始, 依次给函数传递参数
+ 特点:
-> 会立即执行函数(不适合用作定时器处理函数或者事件处理函数)
+ 作用:
-> 伪数组借用数组方法

2. apply()
+ 使用方法, 就直接连接再函数名后面使用
+ 语法:
-> fn.apply()
-> obj.fn.apply()
+ 参数:
-> 第一个参数, 就是函数内部的 this 指向
-> 第二个参数: 是一个数组或者伪数组都行, 里面的每一项依次给函数传递参数
+ 特点:
-> 会立即执行函数
+ 作用: 可以以数组的形式给某些功能函数传参
-> Math.max()

3. bind()
+ 使用方法, 就直接连接再函数名后面使用
+ 语法:
-> fn.apply()
-> obj.fn.apply()
+ 参数:
-> 第一个参数. 就是函数内部的 this 指向
-> 从第二个参数开始, 依次给函数传递参数
+ 特点:
-> 不会立即调用函数
-> 会返回一个新的函数, 一个已经被改变好 this 指向的函数
+ 作用:
-> 改变事件处理函数或者定时器处理函数的 this 指向

posted on 2021-08-10 17:45  phantom_yy  阅读(11)  评论(0)    收藏  举报