web-dev-qa-db-de.com

Javascript-Objekte weisen der Eigenschaft eine Funktion zu

Ich habe nach dem folgenden Beispiel gesucht und gesucht:

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();

Soweit ich weiß, ist player1.logDetails eine Eigenschaft von player1 oder eine Methode von player1. Ich kann also nicht verstehen, wie der Autor einer Funktion eine Eigenschaft zuweist. Außerdem verstehe ich nicht, warum Sie es so schreiben würden, statt: Player1.logDetails = playerDetails (); Was ich probiert habe und nicht funktioniert. 

Dann ruft er player1.logDetails() auf, eine Funktion, die aber nirgends deklariert ist. (?)

Wenn jemand helfen könnte? Vielen Dank im Voraus

13
atomtm

Wenn der Code so geschrieben wurde, wette ich, dass Sie ihn verstehen:

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) }
};

Der Autor des Codes wollte einmal die Funktion "playerDetails ()" definieren. 

Eine andere Möglichkeit, dies vereinfacht darzustellen, ist:

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) }

Wenn Sie also den Code oben optimieren möchten, indem Sie die playerDetails-Funktion nur einmal schreiben, würde er wie der Code in Ihrem Beitrag aussehen.

Wenn ich den Codeblock geschrieben hätte, hätte ich ihn vielleicht so geschrieben: (was leicht zu lesen ist)

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
};
36
Brian McGinity

Javascript-Funktionen unterscheiden sich nicht von anderen Werten oder Objekten.
Sie können sie beliebig zuordnen. Sie können sie sogar als Parameter übergeben.

2
SLaks

Ich bin selbst noch ein Neuling, aber Sie können die Methode auch alternativ im Objekt erstellen. 

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();

Der Link unter "Definieren von Methoden" kann auch helfen, Ihre Frage zu beantworten. Linkbeschreibung hier eingeben

0
sneak972