JS中this的指向问题

this:函数执行的主体,谁把函数执行的,谁就是执行的主体(和函数在哪执行的,以及在哪定义的没有直接关系)

JS的非严格模式下:
1、给某一个元素的事件绑定方法,当事件触发,方法执行的时候 ,绑定的这个方法中的this一般都是当前操作的这个DOM元素
(在IE6~8下,如果我们用DOM2事件绑定,方法执行的时候,里面的this不是当前元素而是window)

2、自执行函数执行,方法中的this一般都是window

3、方法执行,看方法名之前是否有点 有的话 点前面是谁 this就是谁,没有的话,this就是window

4、在构造函数执行的时候,函数体中的this都是当前类的实例

5、使用Function.prototype上提供的call、apply、bind实现this改变

fn.call();===>fn中的this:window
fn.call(null)
fn.call(undefined) 

第一个参数写的null还是undefined都代表没有指向的this,所以函数中的this依然是window

apply的语法和作用 跟call基本上完全类似,只有一个区别
apply方法调用的时候 
第一个参数是this指向 第二参数是一个数组,数组中包含了所有需要给函数传递的实参
语法要求是写成一个数组,但是和call一样也是一项一项的形参赋值的

当之前总结的所有this情况 遇到call/apply的时候,都以他俩为主

bind的语法

fn.bind(obj,10,20)

虽然改变了fn中的this 但是并没有把fn执行,它属于预先处理this和实参,不会立即执行,只有达到某个特定条件,才会被触发执行的(IE6~8不兼容)

真实项目中使用bind的意义
需求:1秒后执行fn,执行fn的时候,让fn中的this—>obj,并且给fn传递两个实参10,20
1.png

2.png

3.png

更好的方法用bind预处理(不考虑兼容的情况下)
4.png

6、在ES6中,新增的箭头函数没有行为主体,箭头函数中的this会继承它宿主环境中的this(我在哪个环境下执行的 我的宿主环境就是谁)
5.png

JS的严格模式下:

“use strict”
function fn(){
"use strict";//=>只在当前私有作用域中使用严格模式(也需要处于当前作用域第一行)
}

1、非严格模式下不明确执行主体,浏览器认为执行主题默认是winddow(this一般都是window)
但是在严格模式下,执行主体不明确,this是undefined

fn();===》undefined
window.fn()===》 window
fn.call();===》undefined
fn.call(window)===》window
fn.call(null/undefined) null/undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值