Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 间接调用函数时未定义成员_Javascript_Node.js_Class - Fatal编程技术网

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)