this.String = {
Get : function (val) {
return function() {
return val;
}
}
};
Que fait le ':'?Que fait ce code javascript?
this.String = {
Get : function (val) {
return function() {
return val;
}
}
};
Que fait le ':'?Que fait ce code javascript?
D'autres personnes ont déjà expliqué ce que fait ce code. Il crée un objet (appelé this.String
) qui contient une seule fonction (appelée Get
). Je voudrais expliquer quand vous pourriez utiliser cette fonction.
Cette fonction peut être utile dans les cas où vous avez besoin d'une fonction d'ordre supérieur (c'est-à-dire une fonction qui attend une autre fonction comme argument).
Dites que vous avez une fonction qui fait quelque chose à chaque élément d'un Array
, appelons le map
. Vous pouvez utiliser cette fonction comme ceci:
function inc (x)
{
return x + 1;
}
var arr = [1, 2, 3];
var newArr = arr.map(inc);
Qu'est-ce que la fonction map
fera, est de créer un nouveau tableau contenant les valeurs [2, 3, 4]
. Il le fera en appelant la fonction inc
avec chaque élément du tableau.
Maintenant, si vous utilisez cette méthode beaucoup, vous pourriez être en permanence avec map
appelez toutes sortes d'arguments:
arr.map(inc); // to increase each element
arr.map(even); // to create a list of booleans (even or odd)
arr.map(toString); // to create a list of strings
Si pour une raison quelconque, vous auriez à remplacer tout le tableau avec la même chaîne (mais en gardant le tableau de la même taille), vous pouvez l'appeler comme ceci:
arr.map(this.String.Get("my String"));
Cela va créer un nouveau tableau de la même taille que arr
, mais juste contenant la chaîne "my String"
encore et encore. Notez que dans certaines langues, cette fonction est prédéfinie et appelée const
ou constant
(puisqu'elle retournera toujours la même valeur, chaque fois que vous l'appelez, quels que soient ses arguments).Maintenant, si vous pensez que cet exemple n'est pas très utile, je serais d'accord avec vous. Mais il y a des cas, lors de la programmation avec des fonctions d'ordre supérieur, lorsque cette technique est utilisée. Par exemple, il peut être utile, par exemple, si vous avez un arbre que vous voulez «effacer» ses valeurs mais conserver la structure de l'arbre. Vous pouvez faire tree.map(this.String.Get("default value"))
et obtenir un nouvel arbre qui a exactement la même forme que l'original, mais aucune de ses valeurs.
this.String = {}
spécifie un objet. Get
est une propriété de cet objet. En javascript, les propriétés des objets et leurs valeurs sont séparées par un deux-points ':'.
Ainsi, par l'exemple, vous appelez la fonction comme ce
this.String.Get('some string');
Autres exemples:
var foo = {
bar : 'foobar',
other : {
a : 'wowza'
}
}
alert(foo.bar); //alerts 'foobar'
alert(foo.other.a) //alerts 'wowza'
Mais quel est l'intérêt de l'exemple donné par l'auteur? Je trouve cette question intéressante parce que c'est tellement bizarre: p – TimothyP
@TimothyP, Ce n'était pas la question de l'affiche si – cletus
Je ne peux pas croire le nombre de votes positifs sur cette réponse quand elle n'aborde pas une réponse à la question en dehors de décrire un code de construction d'objet très basique. – AnthonyWJones
Il attribue un objet qui a une propriété "Get" à this.String
. "Get" est assigné une fonction anonyme, qui retournera une fonction qui retourne juste l'argument qui a été donné à la première fonction de retour. Cela semble étrange, mais voici comment il peut être utilisé:
var ten = this.String["Get"](10)();
ten
contiendra alors un 10, vous auriez pu écrire l'équivalent
var ten = this.String.Get(10)();
// saving the returned function can have more use:
var generatingFunction = this.String.Get("something");
alert(generatingFunction()); // displays "something"
C'est plutôt :
attribue juste une certaine valeur une propriété.
+1 Longue introduction pour votre dernière phrase. :-) – Tomalak
ah, bien. Je ne m'attendais pas à ce que java-script n00biness frappe les bons mots (enfin, au moins à peu près): p i gauche en expliquant exactement ce que ':' fait les autres et concentré sur ce que ce code fait en général. merci compagnon –
Cette réponse est peut-être un peu superflu puisque Tom est une bonne réponse, mais juste pour la faire bouillir et être complète: -
this.String = {};
Ajoute un objet à l'objet en cours avec le nom de la propriété de String
.
var fn = function(val) {
return function() { return(val); }
}
retourne une fonction à partir d'une fermeture qui revient en tournant le paramètre utilisé dans la création de la fermeture. Par conséquent: -
var fnInner = fn("Hello World!");
alert(fnInner()); // Displays Hello World!
En combinaison alors: -
this.String = { Get: function(val) {
return function() { return(val); }
}
Ajoute un objet à l'objet en cours avec le nom de la propriété de String
qui a une méthode appelée Get
qui retourne une fonction d'une fermeture qui turn retourne le paramètre utilisé pour créer la fermeture.
var fnInner = this.String.Get("Yasso!");
alert(fnInner()); //displays Yasso!
+1. Bon exemple de pourquoi nous en voudrions un. – AnthonyWJones