次のクラスがある場合 (単純化された例):
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
です。this
Window
MyClass
したがって、いくつか質問があります。
- ajax 呼び出しで、クラスのすべてのメソッドが Window for で強制的に呼び出されるのはなぜ
this
ですか? - 私のやり方で電話
manners
するのは適切ではないですか?talk
私は自分自身を設定する必要がありますthis
か?(このコンテキストでそれがどのように可能かはわかりません)
一般に、私はいつ、どのように and を使用するかについてまだまったく無知apply
でcall
あるため、このトピック全体が非常に混乱しています。過去にこのような問題 (イベント処理など) で問題が発生したときはいつでも、回避策に頼ってきましたがvar that = this;
、トピックをより深く理解する時が来たと思います。その上、その修正はとにかくここでは機能しません。