this指向,改变this方法(笔记)

本文详细探讨JavaScript中不同场景下this的指向,包括普通函数、构造函数、方法、事件处理、定时器、箭头函数以及call、apply和bind等方法如何改变this的指向。
摘要由CSDN通过智能技术生成

都是指向调用者,但是有细分区别:

1.普通函数this指向window,调用者。(严格模式下是undefined)

(用new调用就是构造函数)

2.构造函数this指向实例化对象。

3.方法:调用者对象例如:

let arr = {
    uname: '学者',
    fei : function() {
        console.log(this);

    }
}

arr.fei();

4.事件处理函数指向事件源,比如说下面的document;

document.addEventListener('click', function () {
    console.log(this);
})

5.定时器setinterval中的this指向window,调用者;

6.自调用函数(也叫立即执行函数)调用者window,调用者:

特殊:

1.箭头函数

        箭头函数中的 this 与普通函数完全不同,也不受调用方式的影响,事实上箭头函数中并不存在 this !箭头函数中访问的 this 不过是箭头函数所在作用域的 this 变量。

改变this指向:

都是函数的方法,只能用函数调用

        1.call

                (1)使用 call 方法调用函数,同时指定函数中 this 的值.

                (2)使用call方法调用函数时,第一个参数为this制定的值

                (3)call方法的其余参数会依次自动传入函数做为函数的参数

        用法:call(this, arg1,arg2.....)

        2.apply

        用法:函数.apply(this,  [arg1,arg2,......])

        特殊玩法:改变Math.max的指向,让数组直接穿进去(正常可以使用Math.max(...arr)

let arr = [23, 66,  33,  19,  4,  7];
let re = Math.max.apply(null, all);
console.log(re)

        3.bind(区别于call,apply,他改完之后不会立即执行而是相当于创建了一个新的改变this之后的函数,而call,apply立马执行)

        用法:函数.bind(this, arg1, arg2,......);

玩法:

let btn = document.querySelector('input');
btn.addEventListener('click',function(){
// 禁用按钮
this.disabled = true;
//开启定时器
window.setTimeout(function(){
    this.disabled = false;
     }.bind(this),5000);
});

        这里的bind(更改了定时器里面的this指向,不再是window而是btn调用者)

                

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值