Javascript 如何将匿名函数变量分配给类方法变量?
我试图通过使用实现与coap服务器的通信。我的目标是获得响应(在Javascript 如何将匿名函数变量分配给类方法变量?,javascript,node.js,http,coap,Javascript,Node.js,Http,Coap,我试图通过使用实现与coap服务器的通信。我的目标是获得响应(在response事件处理程序中),然后将其传递给其他变量和函数 事件:'response' function (response) { } 当收到响应时发出。response是 如果指定了observe标志,则'response'事件将返回的实例。根据observe规范,它表示来自服务器的更新 我创建了类someClass,其中包含serverRequest()方法 方法serverRequest()采用强制选项参数(用于设置请
response
事件处理程序中),然后将其传递给其他变量和函数
事件:'response'
function (response) { }
当收到响应时发出。response是
如果指定了observe
标志,则'response'
事件将返回的实例。根据observe规范,它表示来自服务器的更新
我创建了类someClass
,其中包含serverRequest()
方法
方法serverRequest()
采用强制选项参数(用于设置请求选项)和可选参数(如果需要,用于设置消息正文)。此方法的目的是向服务器发送请求并返回响应
,这是的实例
const coap=require('coap');
上课{
构造函数(someOption){
this.someOption=someOption;
}
serverRequest(选项,messageBody=未定义){
const request=coap.request(选项);
让我们回应;
request.on('response',res=>{
console.log(响应);//未定义
响应=res;
console.log(响应);//有效响应
});
if(messageBody!==未定义){
request.write(messageBody);
}
request.end();
console.log(响应);//未定义
返回响应;
}
}
我成功发送消息并获得响应,但是匿名函数中的response
变量似乎是唯一的,并且与response
变量serverRequest
方法不同
问题:如何将变量从匿名函数传递到其他作用域?您可以在匿名函数体内调用您的方法:
根据评论进行编辑:
使用var=this
是欺骗作用域的常见方法此
始终属于函数、方法或匿名的范围,两者仍然是函数
因此,为了保留对类作用域的引用,我将类方法作用域中的this
分配给var,这样当this
更改为匿名函数作用域时,我们仍然可以访问它
在和上面使用箭头函数时,this
关键字不会被重新绑定,我们不必欺骗作用域
class Test
{
constructor(someOption) {
this.someOption = someOption;
}
myMethod ( data ) {
//.. do something
}
anotherMethod() {
var data = {answer:42};
functionWithCallback( (differentOption) => {
this.myMethod(data);
this.someOption = differentOption;
});
}
}
问题作者编辑:
我使用这个
关键字没有问题,脚本产生了相同的结果。我不明白,为什么要使用那个
变量,也许你可以澄清一下?我可以从匿名函数访问类方法和变量,问题是在更改变量值或调用设置类值变量的方法后,值仅在该匿名函数中保持更改,当我在收到响应后打印类变量时,变量保持与收到响应前相同。好的,我将编辑答案,你的问题有点复杂,但基本上你是在试图理解scopes@Lycopersicum现在看一看它仍然不工作,目前我正在尝试用回调函数来编写函数,以向您展示,它不工作我已经用回调函数编写了自己的函数,它工作了,它工作得很好,但是在我的项目中它不工作。我尝试通过键入console.log(this)来打印this
对象代码>在两个位置内:在抽象函数内和方法语句的返回之前。两者都显示了不同的结果,在抽象函数中,一切似乎都如预期的那样,但在方法范围中,它始终保持不变,也在调用我在项目中尝试更改的obj.serverRequest()
obj.variable
后保持不变。。。
class Test
{
constructor(someOption) {
this.someOption = someOption;
}
myMethod ( data ) {
//.. do something
}
anotherMethod() {
var data = {answer:42};
functionWithCallback( (differentOption) => {
this.myMethod(data);
this.someOption = differentOption;
});
}
}