call( ) 、 apply( ) 、 bind( )的使用以及区别:

本文解析了JavaScript中this关键字的指向问题,通过实例展示了call、apply、bind三种方法如何改变this指向,并对比了它们在参数传递上的差异。

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

先看两个简单的示例

**示例-1:**这里的this指向调用的对象

var obj = {
              name:'甄妮',
              oAge:28,
              oFun:function(){
                  console.log(this.name + "年龄" + this.age);
              }
          }
          console.log(obj.name);//打印甄妮
          obj.oFun(); //打印甄妮 undefined

**示例-2:**这里的this指向的是window

var name = '周星星',age = 27;
          function shows(){
              console.log(this.name);
          }
          shows();//打印周星星

A1:call( ) apply( ) bind( )都是用来重新定义this这个对象指向的

var name = '周星星',age = 27;
        var obj = {
              name:'甄妮',
              oAge:28,
              oFun:function(){
                  console.log(this.name + "年龄" + this.age);
              }
          }
        var obj2 = {
              name:'周定发',
              age:29
        }

        obj.oFun.call(obj2);//打印周定发年龄29
        obj.oFun.apply(obj2);//打印周定发年龄29
        obj.oFun.bind(obj2)();//打印周定发年龄29

**注:**1.返回的结果一致:我们传入哪个对象,this指向的就是哪个对象。
2. bind 方法后面多了个 () 。由此可知,bind 返回的是一个新的函数。

B2:call( ) apply( ) bind( )的传参

给对象的方法添加两个参数:

oFun:function(from,to){
  console.log(this.name + "年龄" + this.age,"来自" + from + "去往" + to);
              }
obj.oFun.call(obj2,'观塘','离岛');//打印 周定发年龄29 来自观塘去往离岛
obj.oFun.apply(obj2,['观塘','离岛']);//打印周定发年龄29 来自观塘去往离岛
obj.oFun.bind(obj2,'观塘','离岛')();//打印周定发年龄29 来自观塘去往离岛
obj.oFun.bind(obj2,['观塘','离岛'])();//打印周定发年龄29 来自观塘,离岛去往undefined

call的参数是直接放进去的,传多个参数的话用逗号隔开。
apply的参数都必须放在数组里传进去,同样可以传多个。
apply参数传递和call一样.

**注:**三者的传参类型都允许是各种类型包括函数、object那些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值