在异步原型函数中未定义

问题描述

我的问题类似于this。但是我想将async关键字放入原型函数,而不是构造函数

“ this”在原型函数saySomething中未定义。为什么?如何在课堂上使用异步?

var Person =  function() {
  console.log("CALLED PERSON")
};

Person.prototype.saySomething = async () => {
  console.log(this);//undefined
};

(async function(){
  var ape = new Person();
  await ape.saySomething();
}());

解决方法

您不应该使用arrow function expressions(因为它没有对this的绑定),而是使用regular function expression

var Person =  function() {
  console.log("CALLED PERSON")
};

Person.prototype.saySomething = async function() {
  console.log(this);
};

(async function(){
  var ape = new Person();
  await ape.saySomething();
}());

或使用class的另一个示例(@nickf建议):

class Person {
  constructor() {
    console.log("CALLED PERSON")
  }
  
  async saySomething() {
    console.log(this);
  };
}

(async function(){
  var ape = new Person();
  await ape.saySomething();
}());