javascript - Javascript Array of Functions 失去了 This 范围
问题描述
测试一些代码我发现了这个问题,当我直接调用类Results的函数时,那些工作正常,但是当我将它们推送到一个数组然后我调用那些不起作用的函数时,因为this关键字丢失并且控制台显示未定义的消息。
class Results
{
sum(numbers){
let result=numbers.reduce((a,b)=>a+b);
return result;
}
state(numbers){
console.log(this);
let result= this.sum(numbers)>0 ? "positive" : "negative";
return result;
}
}
function play(){
let results=new Results();
let numbers=[1,2,3,4];
console.log(results.sum(numbers));
console.log(results.state(numbers));
let arrayfunctions=[];
arrayfunctions.push(results.sum);
arrayfunctions.push(results.state);
arrayfunctions.forEach(funcion=>
{
console.log(funcion(numbers))
});
}
解决方案
轻微的变化是定义类方法。
sum(numbers) {
let result=numbers.reduce((a,b)=>a+b);
return result;
}
更改为分配给类成员变量的函数
sum = (numbers) => {
let result=numbers.reduce((a,b)=>a+b);
return result;
}
class Results
{
sum = (numbers) => {
let result=numbers.reduce((a,b)=>a+b);
return result;
}
state = (numbers) => {
console.log(this);
let result= this.sum(numbers)>0 ? "positive" : "negative";
return result;
}
}
function play(){
let results=new Results();
let numbers=[1,2,3,4];
console.log(results.sum(numbers));
console.log(results.state(numbers));
let arrayfunctions=[];
arrayfunctions.push(results.sum);
arrayfunctions.push(results.state);
arrayfunctions.forEach(funcion=>
{
console.log(funcion(numbers))
});
}
play();
推荐阅读
- c# - C# 并行长时间运行的交互比顺序交互慢两倍
- typescript - 创建依赖实体
- ruby - 为多个 Ruby rspec 测试运行使用的共享资源实现互斥
- python - 删除链表的第一个元素 - 我更简单的解决方案是否正确,或者删除的节点是否仍然占用内存?
- sql - SQLITE 查询以获取表中的列名,如果它具有所有空值
- api - 如何使用邮递员获取 REST API 请求中的下一个任务?
- solidity - 试图理解 solc 发出的 EVM 字节码
- django-templates - 如何在 Django 模板中获取静态资产的完整 URL?
- android - 用于蓝牙连接的 Android 前台服务
- python - 如何格式化可变数量的参数?