8. call-apply-bind

文章详细介绍了JavaScript中call、apply和bind这三个方法的作用,它们主要用于改变函数内部的this指向。call和apply都可立即执行函数,并改变this,不同在于传递参数的方式,call接受参数列表,apply接收参数数组。bind则不会立即执行,而是返回一个新的函数,其this已被预设。通过示例代码展示了如何在不同场景下使用这些方法。
摘要由CSDN通过智能技术生成

8. call-apply-bind

call-apply-bind的作用,就是改变普通函数中的this指向

  1. call

    语法:函数名.call(this指向谁, 原来的参数队列)

    (1)函数立即执行

    (2)改变函数中的this为指定的第一个参数

  2. apply

    语法:函数名.apply(this指向谁, [原来的参数队列])

    (1)函数立即执行

    (2)改变函数中的this为指定的第一个参数

  3. bind

    语法:函数名.bind(this指向谁, 原参数1, 原参数2)

    (1)函数不会立即执行,而是返回一个新的改变this指向后的函数

注意:

  1. call和apply的相同点和区别

    (1)相同点:都能改变this指向,函数都会立即调用

    (2)不同点:传递参数的方式不同,call:参数队列,apply数组

  2. call-apply和 bind的区别
    (1)call 、apply 函数会立即调用

    (2)bind函数不会立即调用,而是返回一个新的函数

/**
 *  普通函数的this指向,只跟调用的时候调用者有关,跟在哪里定义的,在哪里调用的没关系
 *  孙冬泉.吃()  在哪里吃   吃方法在哪里定义的都没关系
 */

// chi方法定义在 window作用域
function chi(){
    console.log('chi this: ', this);
}

//chi(); // this window 因为调用者是window

var obj = {
    ff:function(){
        chi(); // 
    },
    ff99:chi
}
obj.ff();
obj.ff99();

// 如何改变一个函数中的this指向
/**
 * 1. 函数名.call(this指向谁, 原参数1,原参数2,.....) 
 *    (1) 函数立即执行
 *    (2) 改变函数中的this为指定的第一个参数
 * 
 */

function study(name,time){
    console.log('name: ', name, 'time: ', time);
    console.log('study this: ', this);
}

study('马万佳',30);
var obj1 = {
    name:'焦龙超'
};
var obj2 = {
    name:'郑向前'
}

study.call(obj1,'yy', 10);

/**
 * apply 
 * 语法:函数名.apply(要改的this, [原参数1,原参数2,....])
 * 
 * (1) 函数立即执行
 * (2) 将函数中的this,改为第一个参数
 */

study.apply(obj2,['xx',20])

/**
 * bind 
 * 语法: 函数名.bind(要改的this, 原参数1,原参数2,.....)
 * 
 * (1) 不会立即执行函数,而是返回一个新函数,新函数的this指向已经被改变为第一个参数了
 * 
 */
console.log('----bind-----');
var resFn = study.bind(obj1, 'zyx',20);
console.log('bind返回的函数', resFn);
resFn();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值