首页 > 解决方案 > 从具有范围的类中传递函数

问题描述

我正在编写一个javascript项目..我需要将一个函数从一个类对象粘贴到另一个函数并从另一个函数执行它。问题是函数的范围发生了变化,在我使用的函数中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

标签: javascriptscope

解决方案


This带功能

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

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

问题

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

使用绑定解决问题

使用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>


推荐阅读