web-dev-qa-db-ja.com

JavaScriptオブジェクトは関数をプロパティに割り当てます

私は次の例を探して苦労していました:

_var player1= {name: "Chris", score: 1000, rank: 1};
var player2= {name: "Kristofer", score: 100000, rank: 2};

function playerDetails(){
alert("The name of the player is "+ this.name + "."+ " His score is : "+ this.score + "and his rank : "+ this.rank);
}
player1.logDetails= playerDetails;
player2.logDetails= playerDetails;

player1.logDetails();
player2.logDetails();
_

私が知る限り、_player1.logDetails_はplayer1のプロパティまたはplayer1のメソッドです。そのため、作成者が関数にプロパティを割り当てる方法を理解できません。また、なぜ次のように書くのかわかりません:player1.logDetails = playerDetails();私が試してみましたが動作しません。

次に、関数であるがどこにも宣言されていないplayer1.logDetails()を呼び出します。(?)

誰かが助けることができるなら?前もって感謝します

15
atomtm

コードが次のように書かれていれば、きっと理解できるでしょう。

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1,
                playerDetails: function() { alert('The name is '+ this.name) }
};

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2,
                playerDetails: function() { alert('The name is '+ this.name) }
};

コードの作成者は、「playerDetails()」関数を1回定義したいと考えていました。

これを簡単に示す別の方法は次のとおりです。

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1
};

player1.playerDetails=function() { alert('The name is '+ this.name) }

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2
};

player2.playerDetails=function() { alert('The name is '+ this.name) }

したがって、playerDetails関数を1回だけ記述して上記のコードを最適化したい場合は、投稿のコードのようになります。

コードブロックを記述した場合、次のように記述した可能性があります(読みやすい)。

function playerDetailsFunc() {alert('The name is '+ this.name) }

var player1 = {
                name: "Chris", 
                score: 1000, 
                rank: 1,
                playerDetails: playerDetailsFunc
};

var player2 = {
                name: "Kristofer", 
                score: 10000, 
                rank: 2,
                playerDetails: playerDetailsFunc
};
40
Brian McGinity

JavaScript関数は、他の値やオブジェクトと違いはありません。
好きなようにそれらを割り当てることができます。それらをパラメーターとして渡すこともできます。

3
SLaks

私はまだnewbですが、代わりにオブジェクトにメソッドを作成できます。

var player1= {name: "Chris", score: 1000, rank: 1, logDetails: playerDetails};
var player2= {name: "Kristofer", score: 100000, rank: 2, logDetails: playerDetails};

function playerDetails(){
console.log("The name of the player is "+ this.name + "."+ " His score is : "+ this.score + "and his rank : "+ this.rank);
}

player1.logDetails();
player2.logDetails();

また、以下の「メソッドの定義」のリンクは、質問への回答に役立つ場合があります。 ここにリンクの説明を入力

0
sneak972