如何在 ajax 回调中访问 John Resig 类中的成员?



我使用的是这里提到的John resig的实现类:http://ejohn.org/blog/simple-javascript-inheritance/

现在我有了一个函数,它实际上是提供给ajax方法的回调。现在,我如何访问这个函数中的类成员?

---编辑---

案例I

假设,这里是我定义的类:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  },
  dance: function(){
    return this.dancing;
  }
});

我用它就像:

var p = new Person(true);
$.ajax({url: url, success: p.dance}); 

然后,在舞蹈方法中,这个.dancing不起作用,因为它不会指向对象p。

案例二:

我正在使用knockoutjs(http://knockoutjs.com)用于将我的UI绑定到对象。假设我们有:

var AppViewModel = Class.extend({
  person: new Person()
});

html中的绑定为:

<button data-bind="click: person.dance">Dance</button>

在这种情况下,dance中的"this"将指向AppViewModel的对象,而不是person。

后一种情况对我来说更重要。

这个怎么样:

var p = new Person(true);
$.ajax({
    url: url,
    success: p.dance.bind(p)
});

bind()在最新的浏览器中可用,但您可以为旧的浏览器提供优雅的降级,如MDN所示。

在你喜欢的KnockoutJS的情况下,你可以这样写:

<button data-bind="click: person.dance.bind(person)">Dance</button>

我不是KnockoutJS用户,但正如我在他们的文档页面上看到的一个非常相似的例子一样,这可能会起作用。

最新更新