从具有作用域的 class 传递一个函数

passing a function from a class with the scope

我正在编写一个 javascript 项目.. 我需要将一个函数从 class 对象粘贴到另一个函数并从另一个函数执行它。问题是函数的范围发生了变化,在我使用 this 的函数中,由于范围发生了变化,所以失败了。有没有办法在保留范围的情况下转发此功能?

我写了一个例子来演示我遇到的问题

const appDiv = document.getElementById('app');

class a {
  b = 5;

  getB() {
    return this.b;
  }
}

const obj = new a();
const aa= obj.getB;

appDiv.innerHTML = aa();

所以当我 运行 aa() 它失败了,因为 this.b 未定义。

我该如何解决?

我还创建了一个 stackblitz https://stackblitz.com/edit/js-hjzedd?file=index.js

This 函数

在函数中,this 的值取决于函数的调用方式。

如果在Strict mode中,则this的值为undfined。如果不在严格模式下,this 将默认为全局对象,在浏览器中为 window。

问题

将函数提取到新变量中时,原始对象丢失。

使用绑定解决问题

使用 bind 将允许您设置 this 值。

const appDiv = document.getElementById('app');

class a {
  b = 5;

  getB() {
    return this.b;
  }
}

const obj = new a();
const aa= obj.getB.bind(obj);

appDiv.innerHTML = aa();
<div id="app"></div>