$emit 不适用于匿名函数

$emit does not work from an anonymous function

在挂载的钩子中我有以下匿名函数:

window.onkeydown = function(evt) {
  evt = evt || window.event;

  var isEscape = false;

  if ("key" in evt) {
     isEscape = evt.key === "Escape" || evt.key === "Esc";
  } else {
    isEscape = evt.keyCode === 27;
  }

  if (isEscape) {
    this.$emit("close");
  }
};

但是,当点击 esc 按钮时,出现以下错误:

app.js:2033 Uncaught TypeError: this.$emit is not a function at window.onkeydown (app.js:2033)

我该如何解决这个问题?

function 关键字为此创建了一个新的上下文。要在函数内使用此关键字,您可以 bind 它,将其分配给另一个变量,例如 var self = this 或使用不创建新上下文的箭头函数。

window.onkeydown = evt => 
{ 
  evt = evt || window.event;
  var isEscape = false;
  if ("key" in evt) {
    isEscape = evt.key === "Escape" || evt.key === "Esc";
  } else {
    isEscape = evt.keyCode === 27;
  }

  if (isEscape) {
    this.$emit("close");
  }
};