js 好像this是指调用当前函数的那个对象,那在prototype中怎样才能保证,我调用当前对象的属性呢?

例如,有

function Items(){

}

Items.prototype.getPage = function() {
    this.nowPage=$("#pageinfo").attr("nowpage");
};

这样一段程序
items=new Items();
items.getPage();
直接调用 getPage应该不会出错

但是如果下面这段程序

Items.prototype.autoGetItems = function(action,actData) {
    $(window).scroll(function () {
            this.getPage();
    });
};
这样应该会报错,没有getPage这个函数什么的

那在不同情况下调用不是很容易出问题?我应该怎么保证,我要调用的那个就是当前对象的属性,或者方法呢?
阅读 4.8k
2 个回答

nealnote已经给出了正确答案,我来总结一下:

要记住this是跟一个执行上下文(EC)关联的,大部分情况下,就是跟一个函数关联的。

题主给的最后一段代码里面,是函数里面嵌套了函数,外层函数里面的this是“autoGetItems的调用者”,而内层函数中的this是window(这是jQuery决定的)。所以通过一个外部变量将外层的this导入内层即可。

结论就是:

this是个上下文相关的值,由跟它最近的包裹它的函数的调用方式决定。而且this不能穿透到外部function、也不能穿透进内部function。

Items.prototype.autoGetItems = function(action,actData) {
  var self = this;
  $(window).scroll(function () {
    self.getPage();
  });
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题