2011-11-27 3 views
0

J'ai un tableau this.colors = [RED, BLUE, GREEN], et parfois je voudrais choisir une couleur aléatoire de ce tableau. Quand je le faire de cette façon, le résultat est normal:fonction renvoie la fonction en javascript

rand_color = this.colors[Math.floor(Math.random() * this.colors.length)] 
javascript: console.log(rand_color) 
// => rgb(211, 65, 65) 

Mais quand je l'ai enveloppé dans la fonction:

this.pick_random_color = function() { 
    return this.colors[Math.floor(Math.random() * this.colors.length)]; 
} 

cette fonction ne retourne pas de valeur aléatoire. Au lieu de cela, je reçois ce message dans le journal:

color = this.pick_random_color; 
javascript: console.log(color); 
// => this.pick_random_color = function() { 
// => return this.colors[Math.floor(Math.random() * this.colors.length)]; 
// => } 

Quel est le problème avec la fonction?

+2

Je suis assez sûr que votre utilisation de 'this' est obscurcissent votre code, il est tout à fait inutile. DaveShaw a 100% raison, vous affectez une variable null à 'color' dans ce cas. – Alex

Répondre

7

Vous n'avez pas besoin de parenthèses après l'appel à pick_random_color?

color = this.pick_random_color(); 

Ce que vous semblez faire est color à l'attribution de la fonction pick_random_color, pas l'exécuter.

2

Vous avez oublié parens. Vous devez ajouter() à this.pick_random_colors

2

C'est parce que this.pick_random_color est une référence à une fonction. Vous devez exécuter cette fonction en écrivant this.pick_random_color().

Mais assurez-vous que les mots-clés this fait référence à l'objet d'origine

Questions connexes