javascript - 从具有范围的类中传递函数
问题描述
我正在编写一个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
解决方案
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>
推荐阅读
- rpmbuild - 打包 AppImage 时如何跳过精灵检查?
- r - 从另一个数据帧中减去带有条件的数据帧中的值
- typescript - TypeScript 不使用 Pick 强制返回类型
- reactjs - 在 redux 操作中应用多个过滤器
- swift - 如何在 SwiftUI 中使用 Font Awesome 作为自定义字体?
- graph - 为什么我们在数学中至少有三个图的定义?
- excel - 无法通过 VBA 在 Internet Explorer 中填充文本框
- xml - 使用 PL SQL 提取基于属性的 XML
- laravel - 如何在 Laravel 网站而不是 500 页中显示错误
- node.js - 使用 Github Actions 将 Angular 应用程序部署到 Azure 失败。未找到 package.json