首页 > 解决方案 > 对象方法中的 this

问题描述

Function.prototype.defer = function(ms) {
  let f = this;
console.log(this);
    
  return function(...args) {
     console.log(this);
     setTimeout(() => f.apply(this, args), ms);
  }
};

let user = {
  name: "John",
  sayHi() {
    alert(this.name);
  }
}

user.sayHi = user.sayHi.defer(1000);
user.sayHi();

你好!以下是这段代码的要点:我们必须将方法 defer(ms) 添加到所有函数的原型中,该方法返回一个包装器,将调用延迟 ms 毫秒。它必须像这样工作:

`function f(a, b) {
  alert( a + b );
}

f.defer(1000)(1, 2); // shows 3 after 1 second`

因为它应该也适用于对象的方法,所以在这段代码中this明确分配给let f。我的问题是关于这个。为什么在第一个console.log 中是sayHi 方法,而在第二个中是对象用户?感谢您的回答。

标签: javascript

解决方案


推荐阅读