js中改变this指向多少三种方法

文章详细介绍了JavaScript中改变函数内部this指针的三种方式:call()、apply()和bind()。call()和apply()不仅可改变this,还能立即调用函数,而bind()则只改变this指向,不执行函数,常用于事件处理或创建新函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改变this指向多少三种方法


改变this指向的三种方法: call()方法、apply()方法、bind()方法

call()方法

1、可以进行函数的调用
2、可以改变this的指向,没有参数this指向window
3、可以改变this的指向,如果有一个参数,this指向当前参数
4、可以改变this的指向,如果有多个参数,this指向第一个参数,剩下的参数是参数列表

function fn() {
        console.log('fn');
    }
    // fn()
    fn.call()
    var name = '全局的'
    var obj_1 = {
        name: 'obj_1',
        getName: function (x, y, z) {
            console.log(x, y, z);
            console.log(this);
            console.log(this.name);
        }
    }
    // obj_1.getName()
    obj_1.getName.call()
    var obj_2 = {
        name: 'obj_2'
    }
    obj_1.getName.call(obj_2)
    obj_1.getName.call(null, 1, 2, 3)

在这里插入图片描述

apply()方法

1、可以进行函数的调用
2、可以改变this的指向,没有参数this指向window
3、可以改变this的指向,如果有一个参数,this指向当前参数
4、可以改变this的指向,如果有多个参数,this指向第一个参数,剩下的参数是数组

 var name = '全局的'
    var obj_1 = {
        name: 'obj_1',
        getName: function (x, y, z) {
            console.log(x, y, z);
            console.log(this);
            console.log(this.name);
        }
    }
    var obj_2 = {
        name: 'obj_2'
    }
    // fn.apply()
    obj_1.getName.apply()
    obj_1.getName.apply(obj_2)
    obj_1.getName.apply(null, [1, 2, 3])

在这里插入图片描述

bind()方法

1、不能进行函数的调用
2、可以改变this的指向,没有参数this指向window
3、可以改变this的指向,如果有一个参数,this指向当前参数

 var name = '全局的'
    var obj_1 = {
        name: 'obj_1',
        getName: function (x, y, z) {
            console.log(x, y, z);
            console.log(this);
            console.log(this.name);
        }
    }
    var obj_2 = {
        name: 'obj_2'
    }
    // fn.bind()
    var obj_3 = {
        name: 'obj_3',
        getName: function () {
            console.log(this);
            console.log(this.name);
        }.bind(obj_2)
    }
    obj_3.getName()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值