JavaScript的Function.prototype.call()详解

call()函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次执行时functionObject函数内部的this指针引用。该函数属于Function对象,所有主流浏览器均支持该函数。

参数描述
thisObj可选/Object类型指定执行functionObject函数时,函数内部this指针引用的对象。
arg1可选/任意类型调用functionObject函数时传入的第1个参数。
arg2可选/任意类型调用functionObject函数时传入的第2个参数。。
args可选/任意类型调用functionObject函数时传入的更多参数,可以有多个。

改变this指向,方法重用

		function setName() {
			console.log(this);
			console.log(this.name);
		}
		let name="Jerry";
		let animal = {
			name: "Tom",
		}
		setName()
		setName.call(animal)

运行效果如下:
第一次this指向全局window
第一次指向animal对象
在这里插入图片描述

带参数的 call() 方法

call() 方法可接受参数:

	function address(city, country) {
			console.log(this);
			console.log(this.name + " " + this.age + "," + city + "," + country)
		}
		let animal = {
			name: "Tom",
			age: 21
		}
		address("南宁","西乡塘");
		address.call(animal, "南宁", "武鸣");

在这里插入图片描述

.call.bind()是一个常见的JavaScript技巧,用于将一个函数绑定到一个特定的this值。它是函数绑定技巧中的一部分,可用于将一个函数绑定到某个对象,以便在执行该函数时使用该对象作为this值。 .call.bind()实际上是两个函数的组合。首先,.call方法是一个JavaScript内置函数,它是用于将函数调用的this值绑定到特定值或对象。接下来,.bind()方法是一个函数绑定函数,它返回一个新函数,该函数将调用原始函数,并在执行时将指定的this值作为第一个参数传递。 .call.bind()方法的基本形式如下: ``` var bound = Function.prototype.call.bind(someFunction); bound(thisArg, arg1, arg2, ...); ``` 其中: - Function.prototype.call是一个JavaScript内置函数,可以调用其他函数,并传递一个特定的this值。 - bind()是一个函数绑定函数,它返回一个新函数,该函数将原始函数绑定到给定的this值。 - someFunction是要绑定的原始函数。 - bound是一个新函数,它将在执行时将其第一个参数作为this值传递给someFunction。 该技术可以解决JavaScript中函数调用中this值的问题。例如,当在对象方法中调用函数时,this值不一定是该对象,而是由该方法的调用者决定。使用.call.bind(),我们可以绑定实际的this值,以便在方法中使用它。 例如,如果有一个对象person,其中包含方法sayHi,可以使用.call.bind()将该方法绑定到person对象: ``` var person = { name: 'John', sayHi: function() { console.log('Hi, my name is ' + this.name); } }; var bound = Function.prototype.call.bind(person.sayHi); bound(); //输出:Hi, my name is John ``` 在上面的代码中,我们将person.sayHi方法绑定到person对象,然后调用绑定的方法,使用person对象作为this值。结果,输出'Hi, my name is John',因为this值被绑定到person对象。 总之,.call.bind()技巧是一种常用的JavaScript函数绑定技巧,用于将函数绑定到特定的this值,以便在函数调用时使用该this值。它可以解决JavaScript中一些常见的this值问题,使代码更加清晰易懂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值