Javascript 间接调用函数时未定义成员
输出为:Javascript 间接调用函数时未定义成员,javascript,node.js,class,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_membe
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
有人能告诉我,为什么通过存储在映射中的引用调用Hello的成员函数与直接调用它有什么不同
我可以如何解决这个问题。当您执行以下操作时:
2
undefined
let h = new Hello(2);
h.print_member();
print_成员
方法中的this关键字将等于h(对象实例)。这是正确的。但是,当您执行时:
2
undefined
let h = new Hello(2);
h.print_member();
或者同等地
h.name_function_map["print_member"]();
print\u成员
方法中的this关键字将等于h.name\u function\u map
,即:
h.name_function_map.print_member();
显然,这个对象没有成员属性,这就是为什么您没有定义的原因。使其成为:h.name\u function\u map.print\u member(h);然后打印_member(that){console.log(that.member)}或使用Function.prototype.call:
h.name\u Function\u map.print\u member.call(h)