JavaScript如何从回调函数设置成员变量?
我有一个自定义对象,需要在后台使用XMLHttpRequest异步加载文件 我已经设置了请求并正确地调用它,得到了对对象原型中定义的正确方法的响应。但我相信这个对象不是正确对象的“实例”。例如: 在Obj A上调用成员函数。 函数执行并启动XMLHttpRequest。 XMLHttpRequest正确调用onload函数。 在设置的onload函数中,我更改了Obj a的一个属性(如果您想知道的话,只是一个布尔值) 这就是问题发生的地方,布尔值实际上并没有改变为预期值。这有什么办法吗 编辑(已添加代码段): 前两个功能是工作“不正常”的回调。后两个从“主线程”调用。这些命令启动HTTP请求 (添加调用这些函数的代码。) 构造此对象的代码是:JavaScript如何从回调函数设置成员变量?,javascript,Javascript,我有一个自定义对象,需要在后台使用XMLHttpRequest异步加载文件 我已经设置了请求并正确地调用它,得到了对对象原型中定义的正确方法的响应。但我相信这个对象不是正确对象的“实例”。例如: 在Obj A上调用成员函数。 函数执行并启动XMLHttpRequest。 XMLHttpRequest正确调用onload函数。 在设置的onload函数中,我更改了Obj a的一个属性(如果您想知道的话,只是一个布尔值) 这就是问题发生的地方,布尔值实际上并没有改变为预期值。这有什么办法吗 编辑(已
this.entityArray.push(new Custom3DObject(sphere.verts, sphere.inds, sphere.norms));
我在这里找到了答案:
基本上,在定义/设置回调函数“onload”之前,它说要定义一个变量,var local=this;第一。现在我的函数如下所示:
Entity.prototype.getAndCompileVertexShader = function(filename)
{
var request = new XMLHttpRequest();
request.open("GET", "shaders/" + filename, true);
request.responseType = "text";
var local = this;
request.onload = function(e) {
console.log("RECEIVED VERTEX SHADER");
local.vertexShaderHandle = GL.createShader(GL.VERTEX_SHADER);
GL.shaderSource(local.vertexShaderHandle, e.target.response);
GL.compileShader(local.vertexShaderHandle);
local.vertexShaderCompiled = true;
}
request.send();
}
并在回调函数中使用该新变量访问成员(实例)数据。奇怪。查看代码会很有帮助。使用一些代码更容易理解您的想法…添加了代码段。您调用“类”的代码在哪里?添加了构造类并调用函数的代码。
this.entityArray.push(new Custom3DObject(sphere.verts, sphere.inds, sphere.norms));
Entity.prototype.getAndCompileVertexShader = function(filename)
{
var request = new XMLHttpRequest();
request.open("GET", "shaders/" + filename, true);
request.responseType = "text";
var local = this;
request.onload = function(e) {
console.log("RECEIVED VERTEX SHADER");
local.vertexShaderHandle = GL.createShader(GL.VERTEX_SHADER);
GL.shaderSource(local.vertexShaderHandle, e.target.response);
GL.compileShader(local.vertexShaderHandle);
local.vertexShaderCompiled = true;
}
request.send();
}