javaScript中,call(),apply(),bind()的区别

var name = 'name';
var age = 'age'
var obj={
  name:'obj'+this.name,
  age:'obj'+this.age,
  myfun:function(){
      console.log(this.name +'    '+ this.age);
  }
}
function show(){
  console.log(this.name);
}
show();//name,指向全局
obj.myfun();//objname,指向obj
obj.myfun.call(db);//dbname指向括号内的对象db
obj.myfun.apply(db);//dbname指向括号内的对象db
obj.myfun.bind(db)();//dbname指向括号内的对象db,返回函数,需要加括号运行

第一个全局声明的函数,this指向window
第二个this指向obj
第三、四、五个this指向括号内参数–db

所以,call(),apply(),bind()可用于改变this的指向;

没有参数时bind()返回一个新的函数,需要调用才能执行,其他的三者没什么不同

下面看看call(),apply(),bind()有参数时的区别

var name = 'name';
var obj={
  name:'obj'+this.name,
  myfun:function(f,t){
      console.log(this.name + '  来自' +f+' 去往'+t);
  }
}
var db = {
  name:'dbname'
}
// 传参方式不同
obj.myfun.call(db,'成都','上海');    // dbname  来自成都 去往上海
obj.myfun.apply(db,['成都','上海']); // dbname  来自成都 去往上海  
obj.myfun.bind(db,'成都','上海')();  // dbname  来自成都 去往上海
obj.myfun.bind(db,['成都','上海'])();// dbname  来自成都,上海 去往undefined(第一个参数是数组)

由此可见:

call()和bind()的传参方式相同,直接用逗号隔开
apply()略有不同,需要把所有参数放在一个数组

原文:https://www.runoob.com/w3cnote/js-call-apply-bind.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值