u013105260
tldeti
2012-02-13 12:33

做ajax请求时callback函数调用时this变量的变化问题

  • ajax
  • javascript

代码大致如下
[code="javascript"]
var a = (function(){
var a = function (...,param) {
return new a.fn.init (...,param)

}
a.fn = a.prototype = {
init: function (...) {
...
this.param = param
}
callback: function (response) {
this.param //这里似乎this发生改变,this.param值为undefined
...
}
getData: function() {
//通过ajax获得数据,然后回调 callback
doGetAjax(url,data,this.callback)
}
}
a.fn.init.prototype = a.fn;
})()
[/code]
像这种地方想要在callback获得param应该怎么做?

edit1

想了一下,这里ajax返回调用的时候this已经没有绑定了,在a内找不到再次与this绑定的方法,
那就不使用this,使用函数类的局部全局变量达到私有变量的效果,
代码改变如下
:[code="javascript"]
var a = (function(){
var pParam; //添加私有变量
...
init: function (...) {
...
pParam=this.param = param
}
...
callback: function (response) {
pParam //这里似乎this发生改变,this.param值为undefined
...
}
[/code]
想了一下,是否所有对象的属性都应该赋值给 私有变量,而 this.XXX则是要暴露给外界才多加一个赋值?

edit 2

这两天重新看了下,发现这种私有变量是所有实例共享的,一个页面有多个同类组件的话就不行了.
如果是存储一个共享私有变量,每次ajax请求以后都手动立刻将私有变量赋值给相应实例变量,但这样的缺点是多次自动进行ajax操作的话是实现不了的,比如分页ajax请求。

这种情况究竟咋解决.

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

4条回答

为你推荐