Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 - Fatal编程技术网

Javascript 为什么我不能从同一类中的另一个方法调用此方法?

Javascript 为什么我不能从同一类中的另一个方法调用此方法?,javascript,Javascript,在下面的代码中,我不知道如何从handler(sock)方法内部调用parseData(data)方法 从另一个问题开始,我尝试了各种方法: “严格使用”; var net=要求的(‘净额’); var-HOST='127.0.0.1'; 分类机{ 建造商(分拣机){ this.sorter=分拣机; console.log(sorter.name+'Port:'+sorter.Port+'running!'); 这是初始化(); } 初始化(){ net.createServer(this.

在下面的代码中,我不知道如何从handler(sock)方法内部调用parseData(data)方法

从另一个问题开始,我尝试了各种方法:

“严格使用”;
var net=要求的(‘净额’);
var-HOST='127.0.0.1';
分类机{
建造商(分拣机){
this.sorter=分拣机;
console.log(sorter.name+'Port:'+sorter.Port+'running!');
这是初始化();
}
初始化(){
net.createServer(this.handler).listen(this.sorter.port,HOST);
}
装卸工(短袜){
sock.on('data',函数(data){
log('DATA'+sock.remoteAddress+':'+sock.localPort+':'+DATA);
解析数据(数据);
//将数据写回套接字,客户端将从服务器接收数据
//sock.write('Hello there');//响应
});
//将“关闭”事件处理程序添加到此套接字实例
sock.on('close',函数(数据){
console.log('CLOSED:'+sock.remoteAddress+'+sock.remotePort);
});
}
解析数据(数据){
//看看我有没有带数据记录的纸箱
log('查找容器:'+data+'…');
console.dir(this.findByContainer(数据));
}
findByContainer(容器){
返回全局纸箱过滤器(功能(obj){
return+obj.container==+container;
})[0];
}
}
module.exports=分拣机使用
this.parseData(数据)。
由于类实例,必须引用该类。
请参阅该方法内部的其他调用。

使用
this.parseData(数据)。
由于类实例,必须引用该类。

请参阅该方法内的其他调用。

parseData
不在范围内。您需要修改函数,以便在从不同的作用域调用它们时,它们位于作用域中

调用this.initialize()时,您的想法是正确的;它不是一个全局函数,因此您需要参考此
。您需要对
parseData
执行相同的操作

但是,由于您正在从回调调用
parseData
这将不是您所期望的。您需要在回调外部绑定回调或保存对该
的引用。我更喜欢前者,但由你决定

使用
bind


使用保存的对该
的引用

您还可以使用用于回调的。arrow函数的作用域是自动维护的,但是您仍然需要引用
this
来调用
parseData

使用箭头功能:


parseData
不在范围内。您需要修改函数,以便在从不同的作用域调用它们时,它们位于作用域中

调用this.initialize()时,您的想法是正确的;它不是一个全局函数,因此您需要参考此
。您需要对
parseData
执行相同的操作

但是,由于您正在从回调调用
parseData
这将不是您所期望的。您需要在回调外部绑定回调或保存对该
的引用。我更喜欢前者,但由你决定

使用
bind


使用保存的对该
的引用

您还可以使用用于回调的。arrow函数的作用域是自动维护的,但是您仍然需要引用
this
来调用
parseData

使用箭头功能:



它不会被其名称空间调用吗?parseData(data)两者都不起作用,似乎这是一个套接字,而不是类。你怎么称呼它?确切的错误消息是什么?您实际上是从
sock.on
调用它的。也许您可以在
sock之外定义
函数(数据)
函数。在
调用或传递对
this
的引用时?在某些地方,您将本地函数引用为
this。将
初始化,将其他函数引用为
解析数据
,您应该更加一致,这样我们就不会试图猜测它们为什么不同了。它可以通过名称空间来调用吗?parseData(data)两者都不起作用,似乎这是一个套接字,而不是类。你怎么称呼它?确切的错误消息是什么?您实际上是从
sock.on
调用它的。也许您可以在
sock之外定义
函数(数据)
函数。在
调用或传递对
this
的引用时?在某些地方,您将本地函数引用为
this。将
初始化,将其他函数引用为
解析数据
,你应该更加一致,这样我们就不会去猜测他们为什么不同了。我已经尝试了所有这些,但都没有效果。似乎“this”是一个套接字对象。不知道怎么会这样。代码块有点混乱,你能给它们贴上标签,以便清楚第一个是原始问题的副本,另外两个是解决方案吗?@Trispid他的代码块是解决问题的不同选项,但是,由于某些原因,这些方法在这段特定的代码中都不起作用。因此,我想如果我将parseData和findByContainer方法移出它所工作的类,那么我就知道了。@ShaneGrant您能更新您的问题并添加最后的代码吗?或者你可以用你使用的解决方案添加一个答案。我已经尝试了所有这些,都没有效果。似乎“this”是一个套接字对象。不知道怎么会这样。代码块有点混乱,你能给它们贴上标签,以便清楚第一个是原始问题的副本,另外两个是解决方案吗?@Trispid他的代码块是解决问题的不同选项,但是,由于某种原因,这些方法在这段特定的代码中都不起作用。因此,我想如果我将parseData和findByContainer方法移出它所工作的类,那么我就知道了。@ShaneGrant你能更新你的问题吗
sock.on('data', function(data) {
    console.log('DATA ' + sock.remoteAddress + ':' + sock.localPort + ':   ' + data);

    this.parseData(data);
    // Write the data back to the socket, the client will receive it as data from the server
    //sock.write('Hello there'); //response
}.bind(this));
var _this = this;
sock.on('data', function(data) {
    console.log('DATA ' + sock.remoteAddress + ':' + sock.localPort + ':   ' + data);

    _this.parseData(data);
    // Write the data back to the socket, the client will receive it as data from the server
    //sock.write('Hello there'); //response
});
sock.on('data', data => {
    console.log('DATA ' + sock.remoteAddress + ':' + sock.localPort + ':   ' + data);

    this.parseData(data);
    // Write the data back to the socket, the client will receive it as data from the server
    //sock.write('Hello there'); //response
});