我使用的是这里提到的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用户,但正如我在他们的文档页面上看到的一个非常相似的例子一样,这可能会起作用。