0

何らかの理由で、オブジェクト変数の値を false に設定する際に問題があったため、この質問に導かれました。

私が持っていた

var myObject{
     チェック有効 = 偽、
     self.getCheckValid = 関数 () {
          checkValid を返します。
     }
     self.setCheckValid = 関数 (モード) {
          checkValid = モード;
     }
}

objectVariable = 新しい myObject;

を実行objectVarible.setCheckValid(true)すると、真の値が得られます。しかし、objectVariable.setCheckValid(false)アプリ全体を実行するとエラーが発生しました (ただし、モバイルで開発していて、返される実際のエラーを確認できませんでした)。

しかし、モードを false に設定できない場合は、objectVariable = new myObject;もう一度呼び出してオブジェクト全体を再起動できるのではないかと考えていました。これにより、古いオブジェクトが新しいオブジェクトで上書きされ、初期化された状態に戻ります。これが本当に探しているものです。

これをしない理由はありますか?それとも、ある方法が他の方法よりも優れていますか? checkValid を false に設定できなかった理由は何ですか?

4

1 に答える 1

4

オブジェクトを作成するための構文は、プロパティを作成する:代わりに使用=します。.selfプロパティにアクセスするために を使用する必要もありません。また、オブジェクトを変数に割り当てるときは、次の構文を使用する必要がありますvar myObject = {/**properties**/};

   var myObject = {
         checkValid:false,
         getCheckValid: function(){
              return this.checkValid;
         },
         setCheckValid: function(mode){
              this.checkValid = mode;
         }
    };

作業例: http://jsfiddle.net/PSYSM/

checkValidオブジェクトに配置したアクセサーは不要です。アクセサーなしでプロパティに直接アクセスできます。

   var myObject = {
         checkValid:false
    };

   alert(myObject.checkValid);
   myObject.checkValid = true;
   alert(myObject.checkValid);

作業例: http://jsfiddle.net/JtfaJ/

new の使用に関してMyObjectは、オブジェクト リテラルを宣言しているため、これは不可能です。このオブジェクトのインスタンスは 1 つだけ存在するため、オブジェクトのインスタンスを作成することはできません。インスタンスを作成する場合は、オブジェクト コンストラクターを作成する必要があります。これは次のように行うことができます。

function MyObject(){
   this.checkValid = false;
}

var myObject1 = new MyObject();
myObject1.checkValid = true;
alert(myObject1.checkValid);

var myObject2 = new MyObject();
alert(myObject2.checkValid);

作業例: http://jsfiddle.net/PzhUV/

于 2013-03-13T00:29:18.787 に答える