call、apply和bind的用法

在JavaScript中,callapplybindFunction对象自带的三个方法

共同点:

(1) 都是用来改变函数的this对象的指向的

(2)第一个参数都是this要指向的对象,也就是想指定的上下文

(3)都可以利用后续参数传参

区别:

bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用

 

1. call

call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象

用法:

function Animal(name){   
  this.name=name;   
  this.showName=function(){   
    console.log(this.name);   
  }   
}   
function Dog(name){   
  Animal.call(this,name);   // 可视为继承Animal
}   
var dog=new Dog("Crazy dog");      
dog.showName();    // Crazy dog

2. apply

apply([thisObj[,argArray]])

说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 

function class1(args1,args2){       
  this.name=function(){      
   console.log(args,args);      
  }     
}     
function class2(){    
  var args1="1";
  var args2="2";
  class1.call(this,args1,args2);  
  /*或*/
  class1.apply(this,[args1,args2]);
}

var c=new class2();   
c.name();
  •  bind

MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

注意:bind方法的返回值是函数

var bar=function(){   
  console.log(this.x);   
}
var foo={ 
     x:3   
}   
bar();     // undefined
bar.bind(foo)();    // 3
 /*或*/
var func=bar.bind(foo);   
func();

 

 

 

原文:https://www.cnblogs.com/libin-1/p/6069031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值