1

私はこのJavascriptコードを持っています:

$scope.rectifyForm =
{
    visible: false,
    rateErrorMessage: "",
    rectifyErrorMessage: "",
    isValid: function () {
        return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0;
    }
};

メソッドで、isValid両方の変数が設定されていることを確認したい。thisキーワードを使用したため、このコードは機能します。ただし、 を省略するthisと、これらの変数が未定義であるというエラーが発生します。

誰かがこれがなぜなのか説明できますか? を使用する必要があるのはなぜthisですか?

4

2 に答える 2

4

rateErrorMessage呼び出される関数のスコープ内の変数ではありません。これはオブジェクトのプロパティです (したがって、指定する必要がありますtheObject.rateErrorMessage)。そのオブジェクトは関数が呼び出されるコンテキストであるため、 を介して利用できますthis

于 2013-10-07T11:18:17.323 に答える
0

関数がオブジェクトのメソッドとして呼び出されると、その「this」はメソッドが呼び出されたオブジェクトに設定されます。

isValid は、変数 rateErrorMessage も含む rectifyForm のスコープ内で定義された関数です。ただし、関数定義には rateErrorMessage への直接リンクはありません。したがって、関数内の変数にアクセスするには、実際には rectify フォームのスコープを指す「this」を使用する必要があります。「this」を使用しない場合、変数は関数内で未定義になります。

コードは次の方法でも記述できます- function isValid() { return this.rateErrorMessage.length === 0 && this.rectifyErrorMessage.length === 0; }

その後、 $scope.rectifyForm.isValid = isValid;

「this」キーワードの詳細については、javascript の this を参照してください。

于 2013-10-07T11:29:18.050 に答える