call,apply,bind三者用法和区别

定义:

apply():

调用一个对象的一个方法,用另一个对象替换当前对象,例如:B.apply(A,arguments);即A对象应用B对象的方法。

call():

调用一个对象的一个方法,用另一个对象替换当前对象,例如:B.call(A,args1,args2,···);即A对象调用用B对象的方法。

bind()
bind()方法会创建一个函数的实例,其 this 值会被绑定到传给 bind()函数的值。意思就是 bind() 会返回一个新函数。例如:

window.color = "red"; 
var o = { color: "blue" }; 
function sayColor(){ 
 alert(this.color); 
} 
var objectSayColor = sayColor.bind(o); 
objectSayColor(); //blue

作用:

①改变this指向;
②借用别的对象的方法;
③单纯的调用函数;
④实现继承;

apply、call和bind的区别:

相似之处:

①都是用来改变函数的this对象的指向的;
②第一个参数都是this要指向的对象;
③都可以利用后续参数传参;

function add(a,b){
	return a+b;
}

function sub(a,b){
	return a-b;
}

var a1 = add.apply(sub,[4,2]); //sub调用add的方法
var a2 = sub.apply(add,[4,2]); //add调用sub的方法
var a3 = add.call(sub,4,2); //sub调用add的方法

console.log(a1);  //6
console.log(a2);  //2
console.log(a3);  //6
 
//改变this指向
var obj = {
	name:"Bob"
}
var name = "Tom";
function test(){
	console.log(this.name);
	console.log(this);
}
test();  // Tom   Window
test.call(obj);  //Bob {name:"Bob"}

//借用别的对象的方法
var Person1 = function(){
	this.name = "Bob";
}
var Person2 = function(){
	this.getName = function(){
		console.log(this.name);
	}
	Person1.call(this);
	//this指向Person2,结果相当于给Person2加了name属性
}
var person = new Person2();
person.getName();   //Bob
//单纯的函数调用:
function add(){
    alert(1);
}
add.call();
区别:

①apply、call、bind的第一个参数都是this要指向的对象,但apply只有两个参数,第二个参数为一个数组,需要传输的参数值须全部放到数组中。而call、bind一样,参数用逗号分开。

②apply、call返回的的是一个值,而bind返回的是一个函数形式,如果要执行,则后面要再加一个小括号 例如:bind(obj,参数1,参数2,)(),bind只能以逗号分隔形式,不能是数组形式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值