2014-07-25 3 views
2

J'ai une fonction définie dans mon JavaScript avec deux propriétés: size et url:JavaScript - Créer un nouvel objet (Fonction) Utilisation d'un littéral d'objet?

function IconInfo() { 
    this.size = size; 
    this.url = url; 
} 

intérieur d'une autre fonction que je crée une nouvelle instance de IconInfo et définissez les propriétés de cette façon:

function SomeFunction() { 
    var icon = new IconInfo(); 
    icon.size = 64; 
    icon.url = "http://somesite.com/image1.png"; 
} 

Isn Y at-il un moyen de créer une instance comme celle-ci:

var icon = new IconInfo({ 
     size : 64, 
     url : "http://somesite.com/image1.png" 
    }); 

I j'aime mieux cette notation, elle semble plus concise et plus facile à lire.

=========================== MISE À JOUR ================ ================

sur la base de la réponse de Tim de ce fait de la manière suivante:

var icon = { 
    size : 64, 
    url : "http://somesite.com/image1.png" 
}; 

J'ai la question suivante.

Disons que j'ai 2 fonctions à la fois avec les mêmes propriétés exactes et arguments du constructeur:

function Func1(x) { 
    this.x = x; 
} 

function Func2(x) { 
    this.x = x; 
} 

et j'ai un conteneur qui contient deux types:

function Container() { 
    this.f = null; 
} 

Si j'ajoute un des fonctions utilisant cette méthode quel type sera-t-il réellement?

... 
var container = new Container(); 
container.x = new f { // is f Func1 or Func2? 
    x: 10; 
} 
+0

Le terme [* "type" *] (http://ecma-international.org/ecma-262/5.1/#sec-8) a une signification définie dans ECMAScript qui n'est pas cohérente avec votre utilisation. Vous l'utilisez plus comme "class", mais [* '[[Class]]' *] (http://ecma-international.org/ecma-262/5.1/#sec-8.6.2) a un sens différent aussi. Donc, vous voulez vraiment demander "comment puis-je distinguer entre une instance de Func1 et Func2". Regardez l'opérateur [* instanceof *] (http://ecma-international.org/ecma-262/5.1/#sec-11.8.6), ou peut-être la propriété * constructor * de l'objet, mais il y a des problèmes avec les deux approches. . – RobG

Répondre

2

Il y a beaucoup d'options, mais le garder .. simple, vous pouvez simplement faire ceci:

var icon = { 
    size : 64, 
    url : "http://somesite.com/image1.png" 
}; 

vous ne devez pas déclarer un « type », mais vous pouvez .. un peu comme ceci:

function IconInfo(size, url) 
    this.size = size; 
    this.url = url; 
); 
var icon = new IconInfo(2, "www.google.com"); 
+0

J'ai lu quelque chose comme ça sur un autre site de recherche mais je ne savais pas comment le "compilateur" sait que lorsque vous créez une nouvelle icône (comme dans votre premier exemple) de quel type il s'agit? – AClockworkOrangutan

+0

Le "compilateur" de javascript ne se soucie pas si vous avez un type fortement défini. Vous pouvez mettre n'importe quelle propriété que vous voulez sur un objet. Par exemple .. 'var obj = {}' ... 'obj.prop = 2'. Cela ne veut pas dire que ce n'est pas une bonne idée de définir fortement un type, mais c'est une autre discussion entièrement. –

+0

Et si j'ai une autre fonction qui a les mêmes propriétés exactes: taille et URL alors je fais un nouveau bla = {taille: 64, etc ...} comment saurais-je de quel type je parle? – AClockworkOrangutan

1

Vous pouvez réellement le rendre encore plus concis. D'abord, vous oubliez de définir les variables à l'intérieur IconInfo; il devrait être ceci:

function IconInfo(size, url) { 
    this.size = size; 
    this.url = url; 
} 

Pour créer une nouvelle IconInfo dans votre autre fonction, vous aurez juste besoin de l'appeler comme ceci:

function SomeFunction() { 
    var icon = new IconInfo(64, "http://somesite.com/image1.png"); 
} 
+0

Oui, j'ai réalisé tout à l'heure que j'oublie de définir les variables. Mais plus généralement, je voulais juste savoir s'il existait un moyen de créer un objet en utilisant la syntaxe de type "json" du nouveau SomeType ({x: "x", y: "y", etc.}); et aussi ce que l'utilisation de cette syntaxe est appelée de toute façon? Je sais que je l'appelle "json" syntaxe qui est probablement totalement stupide.:) – AClockworkOrangutan

Questions connexes