在jQuery回调中获取父对象

Rya*_*yan 7 javascript

这是我的问题:

var greatapp = {
  start : function(){
    $.AJAX({
      url : 'foo.com',
      success : function(data){
        greatapp.say(data);
      }
    })
  },

  say : function(s){
    console.log(s);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个例子的事实是我在success函数中通过定义对象的名称来重复我的自我,而this不是因为它在外部函数中而显然不起作用.

如何greatapp在JS对象中只有一次名称?

Ada*_*kis 10

一个常见的JavaScript成语是的值保存this到一个变量象meself,并使用回调.

这将起作用,因为回调可以访问在封闭范围内声明的变量 - 换句话说,回调将形成一个闭包 self

var greatapp = {
  start : function(){
    var self = this;
    $.AJAX({
      url : 'foo.com',
      success : function(data){
        self.say(data);
      }
    })
  },

  say : function(s){
    console.log(s);
  }
}
Run Code Online (Sandbox Code Playgroud)