从具有作用域的 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>
我正在编写一个 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>