Js中改变this的方法

发布时间:2024年01月20日

在JavaScript中,你可以使用几种不同的方法来改变函数的this值。以下是其中的一些方法:

  • 使用Function.prototype.bind()方法

bind()方法创建一个新的函数,当这个新函数被调用时,bind()的第一个参数将成为thisArg,后续的参数将在传递的实参前传入作为它的参数。

var obj = { name: 'Alice' };  
var logThis = function() {  

  //本为普通函数,this指向window
  console.log(this.name);  
};  
  
var boundFunction = logThis.bind(obj);  
boundFunction();  // 输出: Alice
  • 使用Function.prototype.call()或Function.prototype.apply()方法

call()apply()方法都可以用来调用一个函数,并设置函数的this值。它们的不同之处在于call()接受参数列表,而apply()接受参数数组。

var obj = { name: 'Alice' };  
var logThis = function() {  
  console.log(this.name);  
};  
  
logThis.call(obj);  // 输出: Alice
  • 使用箭头函数

箭头函数不会创建自己的this值,它只会从包围它的函数那里继承this值。因此,如果你在一个对象的方法中使用箭头函数,那么这个箭头函数的this值将会是该对象。

var obj = { name: 'Alice' };  
var logThis = () => {  
  console.log(this.name);  
};  
  
obj.logThis = logThis;  
obj.logThis();  // 输出: Alice

call():

.call()?是 JavaScript 中的一个方法,用于调用一个函数,并设置函数的?this?值和参数。这个方法属于所有的函数对象,也就是说,任何函数都可以使用?.call()?方法。

.call()?方法的基本语法:

function.call(thisArg, arg1, arg2, ...)

参数解释:

  • thisArg:在函数被调用时使用的?this?值。
  • arg1, arg2, ...:传递给函数的参数列表。

示例

假设我们有一个对象和一个函数:

var obj = { name: 'Alice' };  
  
function logThis() {  
  console.log(this.name);  
}

我们可以使用?.call()?方法来调用?logThis?函数,并设置?this?值为?obj

logThis.call(obj);  // 输出: Alice

如果我们还想传递额外的参数给?logThis?函数,可以在?.call()?方法中添加这些参数:

logThis.call(obj, 'Bob');  // 输出: Bob

在这个例子中,thisArg?是?obj,而?arg1?是?'Bob'。因此,当?logThis?函数被调用时,它的?this?值被设置为?obj,并且它接收一个参数?'Bob'

文章来源:https://blog.csdn.net/H2608520347/article/details/135703164
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。