javascript - 间接调用函数时成员未定义

标签 javascript node.js class

<分区>

class Hello{

    constructor(member) {
       this.member = member;

       this.name_function_map = {"print_member" : this.print_member};
    }

    print_member(){
        console.log(this.member);
    }
}

let h = new Hello(2);
h.print_member();
//=> works as expected


h.name_function_map["print_member"]();
//=> why is it h. member undefined

输出是:

2
undefined

谁能赐教一下,为什么通过map中存储的引用调用Hello的成员函数和直接调用有什么不同?

我该如何解决这个问题。

最佳答案

当你执行时:

let h = new Hello(2);
h.print_member();

print_member 方法中的 this 关键字将等于 h(对象实例)。那是对的。但是,当您执行时:

h.name_function_map["print_member"]();

或同样

h.name_function_map.print_member();

print_member 方法中的 this 关键字将等于 h.name_function_map,即:

{"print_member" : this.print_member}

显然,这个对象没有 member 属性,这就是你未定义的原因。

关于javascript - 间接调用函数时成员未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61458913/

相关文章:

javascript - 是否可以在 ES2015 中导出 "import * as"的结果?

powershell - [System.Web.Security.Membership]::GeneratePassword() - 找不到类型

javascript - JS Sequelize "Where Related"查询?

node.js - Node 版本管理器在 M1 Macbook Air 上运行非常慢

c++ - 使用继承类型调用基类函数

php - 将 html 类/ID 添加到 hook_menu 生成的链接

javascript - 如何在解析中获取关系字段的计数

javascript - Node.js 和前端 js 返回不同的日期格式

javascript - 如何修复 "Service invoked too many times in a short time: exec qps."

javascript - 传递给 Jade 的对象最终作为字符串