我有一个带有变量“ parentVar”的对象,我想将一个ajax请求的响应写入其中。听起来很简单,但是由于某些名称空间问题,我无法做到这一点。
我写了一个非常简单的例子,说明了问题所在。
当我调用对象的init-Function时,ajax请求将开始:
var parentObj = new Parent();
//Do some work (I need some functionality from the object before it can be fully initialized)
alert("Old Value = " + parentObj.parentVar);
parentObj.init(function(){
alert("New Value = " + parentObj.parentVar);
});
初始化函数调用执行Ajax请求的函数“ load”,并返回接收到的数据(在另一个回调函数中)。
function Parent(){
this.parentVar = "old"; //this value should be replaced
this.init = function(initCallBack){
this.load(function(newData){ //load the content of the file
this.parentVar = newData; //write the content into the variable
initCallBack(); //I'm done!
});
}
this.load = function(callbackFunc){
//load the new value from a file via ajax (asyncron).
//When finished: call callbackFunc
callbackFunc("newValue");
}
}
我已经尝试过将范围传递给加载器函数,然后再将其返回给callBack-Function。但这没有用。
我也在var parentscope = this;
init-Function中尝试了“ ”,“ parentscope.parentVar = newData;
”也没有用。
parentVar是私有的,是否可以实现此目标?(我的意思是“ var parentVar = 'old';
”而不是“ this.parentVar = 'old';
”)。
传递给的回调函数load()
没有this
想要的值。您调用该函数的方式this
将是window
。您可以this
如下绑定值:
this.load(function(newData){ //load the content of the file
this.parentVar = newData; //write the content into the variable
initCallBack(); //I'm done!
}.bind(this));
...然后它将起作用:http : //jsfiddle.net/v9Hvb/
通过
parentVar
私有化可以实现这一目标吗?(var parentVar = 'old';
而不是this.parentVar = 'old';
)。
您可以在Parent()
构造函数内使用私有变量,并且可以在构造函数内定义的所有方法中访问它。但是它在外部无法访问,parentObj.parentVar
因此您必须添加一个getter方法。
var self = this;
在Parent()
构造函数内部使用私有变量然后在方法中使用self
代替会更容易this
:
function Parent(){
var self = this;
self.parentVar = "old"; //this value should be replaced
self.init = function(initCallBack){
self.load(function(newData){ //load the content of the file
self.parentVar = newData; //write the content into the variable
initCallBack(); //I'm done!
});
}
self.load = function(callbackFunc){
//load the new value from a file via ajax (asyncron).
//When finished: call callbackFunc
callbackFunc("newValue");
}
}
演示:http://jsfiddle.net/v9Hvb/1/
进一步阅读:MDN的this
文章
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句