如果我们有以下类(一个简化的例子):
function MyClass() {
this.greeting = "Where is the ice cream?";
}
MyClass.prototype.talk = function() {
console.log(this.manners(this.greeting));
}
MyClass.prototype.manners = function(phrase) {
return "I beg your pardon. " + phrase;
}
然后我们尝试通过 ajax 发送它,如下所示:
var c = new MyClass();
$.ajax({
data : c,
url : "ajax.php",
dataType : "json",
type : "post"
});
我得到一个例外MyClass.prototype.talk
,说“this.manners
不是函数”。我得到这个异常的原因是,由于某种原因,ajax 调用强制调用所有方法MyClass
,使用 a this
of Window
(而不是实例MyClass
)。
因此,我有几个问题:
- 为什么 ajax 调用强制使用 Window for 调用类的每个方法
this
? - 以我的方式
manners
打电话不合适吗?talk
我应该设置this
自己吗?(不确定在这种情况下怎么可能)
总的来说,我对如何以及何时使用apply
and仍然一无所知call
,所以整个话题对我来说非常混乱。每当我在过去遇到此类问题(例如,在事件处理中)时,我都会求助于var that = this;
变通方法,但我认为是时候更深入地了解该主题了。此外,无论如何,该修复程序在这里不起作用。