call、apply、bind用法

本文详细介绍了JavaScript中call、apply和bind方法的作用,它们主要用于改变函数执行时的上下文(this指向)。通过示例说明了如何在不同对象间借用方法,以及如何创建新的函数实例。理解这些概念对于深入JavaScript编程至关重要。
摘要由CSDN通过智能技术生成

call apply bind 的用法

JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念 ;

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。


call、apply生成立即执行函数,生成即调用

fn.call(this,参数一,参数二,···)
fn.apply(this,[参数一,参数二,···])

bind是生成一个新的函数,想调用时在调用

fn.bind(this,参数一,参数二,···)()

注意:this为null或者undefined、this时,都指向window

  function test () {
  	//this指向window,运行test()则将会在全局寻找name变量
    console.log(this.name) 
  }
  var obj1 = {
    name: '测试1'
  }
  var obj2 = {
    name: '测试2'
  }
  //使用call() 、apply() 、bind()等方法,改变this指向,不在指向window,指向传入的对象,从而找到name变量
  test.call(obj1)   // 输入测试1
  test.apply(obj2)   // 输入测试2
  test.bind(obj1)()  //输出测试1

个人理解

let obj={
        name:'胡歌',
        age:23,
        love(women,toy){
            console.log(this.name+this.age+'喜欢'+women+"和"+toy)
        }
    }
let newObj={
        name:'霍建华',
        age:'24'
    }

obj.love('薛佳凝','托雷') //输出  胡歌23喜欢薛佳凝和托雷
obj.love.call(newObj,'胡歌','白豆腐')  			//霍建华24喜欢胡歌和白豆腐
obj.love.apply(newObj,['胡歌','白豆腐'])  		//霍建华24喜欢胡歌和白豆腐
obj.love.bind(newObj,'胡歌','白豆腐')()   //霍建华24喜欢胡歌和白豆腐

可以这理解,调用obj对象的love方法时,本来里面的this指向obj对象,因为call()使得this指向了newObj对象,使用找变量时就找到了newObj中的同名变量

也可以这样理解,obj对象中的love方法被newObj对象借来使用,newObj对象暂时有了love方法,当newObj对象使用自己的方法时,this当然指向自己,即调用的自己内部的同名变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值