web-dev-qa-db-fra.com

Les objets Javascript assignent une fonction à une propriété

Je cherchais et luttais pour l'exemple suivant:

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

Autant que je sache, player1.logDetails est une propriété de player1 ou une méthode de player1 . Je ne comprends donc pas comment l'auteur attribue une propriété à une fonction. Aussi, je ne comprends pas pourquoi vous écrivez comme ça au lieu de: player1.logDetails = playerDetails (); que j'ai essayé et ne fonctionne pas. 

Puis il appelle player1.logDetails() qui est une fonction mais n’est déclarée nulle part. (?)

Si quelqu'un pouvait aider ?? Merci d'avance

13
atomtm

Si le code a été écrit comme ceci, je parie que vous le comprenez bien:

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

L'auteur du code a voulu définir la fonction "playerDetails ()" une fois. 

Une autre façon de montrer cela de manière simplifiée est la suivante:

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

Donc, si vous vouliez optimiser le code ci-dessus en n'écrivant qu'une seule fois la fonction playerDetails, cela ressemblerait au code de votre message.

Si j'avais écrit le bloc de code, je l'aurais peut-être écrit comme ceci: (qui est facile à lire)

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

Les fonctions Javascript ne sont pas différentes des autres valeurs ou objets.
.__ Vous pouvez les assigner à ce que vous voulez; vous pouvez même les passer comme paramètres.

2
SLaks

Je suis toujours un newb moi-même, mais vous pouvez créer la méthode dans l'objet comme alternative. 

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

En outre, le lien ci-dessous sous "Définition des méthodes" peut aider à répondre à votre question. entrez la description du lien ici

0
sneak972