this
の私の全体的な理解が大気圏に投げ込まれていると感じています。これをオブジェクトメソッドで使用するとエラーが返されます
私はQuiz
オブジェクトを持っています。このオブジェクトには、クイズの再生に必要な変数とメソッドがあります。
クイズの方法をクイズの別の方法(getQuestion
in skipQuestion()
)から参照しようとしていますが、this.getQuestion
が定義されていないというメッセージがコンソールに表示されています。私はこの場合のthis
がそのオブジェクトを参照しているという印象の下にあったので、問題の機能はthis.getQuestion()
と呼ばれるべきです。
私は取得していますエラーメッセージは、誰もがここで間違って何が起こっているか説明できscript.js:18 Uncaught TypeError: this.getQuestion is not a function
のですか?私init
機能で
はthis
がQuiz
オブジェクトを指しているようですが、skip question
に変更するようです。これは、this
という別の定義を持つクエリに対応していますか?どこで線を描くのですか?this
のコンテキストはいつ変更されますか?
(function(window){
$(document).ready(function(){
var Quiz = {
score : 0,
question: '',
answer: '',
init: function() {
this.getQuestion();
this.checkAnswer();
this.skipQuestion();
},
skipQuestion: function() {
$('#skip').click(function(){
this.getQuestion();
})
},
getQuestion: function() {
$.get('http://jservice.io/api/random', function(data){
$('#question').html(data[0].question);
this.answer = data[0].answer.toLowerCase();
});
},
checkAnswer: function() {
if($('#answer').val() === this.answer) {
this.score += 1;
}
}
}
Quiz.init();
});
})(window);
別の関数の中に入ると、 'this'コンテキストが変更されます。別のファンクションブロックを開く前に、別の変数として使用したい 'this'を格納する必要があります。あるいは、二重矢印関数を使用して、そのようなコンテキストを使用しないでください。問題は次のとおりです: 'function(){this.getQuestion(); }} 'これは次のようにして解決できます:' var that = this;関数(){this.getQuestion(); '()=> {this.getQuestion()}'(それに関連する 'this'オブジェクトはありません) – somethinghere
矢印機能を使用するにはES6 envを実行する必要があることに注意してください。 – azibi
@何かがありますが、私の 'init()'関数は 'skipQuestion'ではなく' this'を使って他の機能を知っています。方法?それは 'this'の意味が違っているのか? –