2

これはオブジェクトにプロパティを割り当てる有効な方法ですか? if/else ステートメントがあり、 piのプロパティを決定したいと考えています。

function game(){
    var self = this;

    this.determineDifficulty = function(){
        var difSet = document.getElementById("dif");
        var chosen = difSet.options[difSet.selectedIndex].value;

        if(chosen === "Easy"){
            var d = 0;
            self.p = 1;
            self.i = 1000;
        }else if(chosen === "Medium"){
            var d = 1;
            self.p = 0.1;
            self.i = 100;
        }else{
            var d = 2;
            self.p = 0.01;
            self.i = 10;
        }
        return d;
    }
}

var myGame = new game();

警告するmyGame.pと、正しい値が返されます。しかし、これは良い習慣ですか?私が理解しているように、複数のメソッドで使用できる変数が必要な場合は、これをオブジェクトのプロパティとして割り当てる必要があります。もう 1 つの方法は、これを通常の変数として返すことです。これが正しければ?

4

1 に答える 1

1

コピー変数を使用する代わりに、this内部で参照を使用してオブジェクト プロパティの割り当てを行うことができます。ゲームのオブジェクトプロパティとしてdetermineDifficulty作成するため、これが機能することに注意してください。determineDifficulty「game()」内でインライン関数として宣言した場合this、ゲームではなくインライン関数を参照します。

ただし、すべてのコンストラクター関数を大文字にすることをお勧めします。だからあってはならfunction Game()ないfunction game()

編集:

オブジェクトにプロパティ値を直接割り当てるために、私が言ったようにすることができます。ただし、determineDifficultyコールバック関数として設定している場合はthis、必要なオブジェクトを参照しません。

//For Example:

function Obj() {
    this.foo = 5;
    this.set_foo = function() {this.foo = 10; }
}

var obj = new Obj();
alert(this.foo); //5
obj.set_foo();
alert(this.foo); //10

//The Following will not work
element.onclick = obj.set_foo;

要素をクリックthisすると、 ではなく要素を参照しますobj

于 2013-05-16T15:15:16.860 に答える