this
注: これは、JavaScriptの使用に関する一般的な質問ではないことに注意してください。これは、aspect.around の誤動作に関するものです (呼び出しのスコープを設定するためのものですが、そうではありません)。問題は、aspect.around が誤動作するのはなぜですか? この質問では、再現方法を注意深く読み、提供されているフィドルを使用して再現する必要があります。
問題をフィドルに収めるために、アプリを細断する必要がありました。だからここにあります:
http://jsfiddle.net/mercmobily/THtsv/1/
これは検証付きの単純なフォームです。
- テキスト ボックスに何かを入力します。ウィジェットの検証メソッドが呼び出されます。
- 次に送信ボタンを押します。検証は失敗し、aspect.around が呼び出されて検証メソッドがラップされます。
- その時点で、もう一度テキスト ボックスに何かを入力してみてください。「this」がウィジェットではなく「window」に設定されているためにバリデーターが失敗するため、エラーが返されます。
そのため、アスペクトが追加されると、バリデーターは機能しなくなります。基本的に、「これ」の価値は失われます。今:
spect.around()は、新しいバリデーターを正しいスコープで実行することを意図しており(明らかに)、実行に失敗しています
バリデータへの呼び出しを次のように変更することで、この問題を「修正」でき
return originalValidator.call(this, value);
ます。コードをバックトレースすると、aspect.around() が通常の動作を行っていることがわかります...しかし、何か間違ったことをしているに違いありません
では、質問: dojo.around() が誤動作this
し、渡されたオブジェクトのスコープに設定されないのはなぜですか?
メルク。