Js中改变this的方法

在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'

你可能感兴趣的:(javascript,开发语言,ecmascript)