call、applyd的区别,原生JS实现bind。(call,apply,bind三者用法和区别:角度可为参数、绑定规则,运行效率、运行情况)。

这篇博客深入探讨了JavaScript中的apply()、call()和bind()方法,它们用于改变函数调用时的上下文(this)。文章通过实例解释了如何使用这三个方法来改变this指向、借用其他对象的方法以及实现继承。同时,对比了它们之间的相似性和差异,包括参数传递方式和返回值的不同。此外,还展示了如何在实际场景中应用这些概念,如在对象方法和函数调用中的应用。
摘要由CSDN通过智能技术生成

定义:

apply():

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

 

call():

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

作用:

①改变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对象的指向的;

②第一个参数都是this要指向的对象;

③都可以利用后续参数传参;

 

区别:

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

②apply、call返回的的是一个值,而bind返回的是一个函数,需要执行这个函数才会得到值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值