Domanda

sono un relativamente novizio di programmazione ad oggetti in JavaScript, e io sono sicuro del modo "migliore" per definire e utilizzare gli oggetti in JavaScript. Ho visto il modo in cui "canonica" per definire gli oggetti e istanziare una nuova istanza, come illustrato di seguito.

function myObjectType(property1, propterty2) {
    this.property1 = property1,
    this.property2 = property2
}
// now create a new instance
var myNewvariable = new myObjectType('value for property1', 'value for property2');

Ma ho visto altri modi per creare nuove istanze di oggetti in questo modo:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

mi piace come che appare secondo modo - il codice è auto documentare. Ma le mie domande sono:

  1. Da che parte è "migliore"?

  2. uso posso che secondo modo per istanziare una variabile di un oggetto tipo che è stato definito utilizzando il modo "classico" di definire il tipo di oggetto con quella implicita costruttore?

  3. Se voglio creare un array di questi oggetti, ci sono altri Considerazioni?

Grazie in anticipo.

È stato utile?

Soluzione

E 'veramente basso per il gusto. In questo modo:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
});

... è generalmente migliore se c'è più di 2/3 argomenti, in quanto favorisce la leggibilità e rende più facile per evitare il problema argomento opzionale (fn(null,null,null,123')).

Un'altra considerazione è la prestazione. Passando argomenti in modo convenzionale sarà più veloce, ma questo aumento di velocità diventa significativa solo in situazioni molto sensibili alle prestazioni.

  

È possibile utilizzare che secondo modo di istanziare una variabile di un tipo di oggetto che è stato definito utilizzando il modo "classico" di definire il tipo di oggetto con quel costruttore implicita?

Non facilmente. Se si desidera creare un'istanza di un costruttore utilizzando un hash invece di passaggio di argomenti, e non avere il controllo della sorgente, allora si potrebbe "involucro" che:

var _constructor = SomeConstructorFunction;

SomeConstructorFunction = function(hash) {
    return new _constructor(hash.property1, hash.property2);
};

Non lo consiglio davvero fare scherzi con le API di terze parti solo per il gusto di stile però.

  

Se voglio creare un array di questi oggetti, ci sono altre considerazioni?

Quanto è grande l'array? Qual è la matrice esattamente? Prestazioni potrebbe essere opportuno prendere in considerazione ...

Altri suggerimenti

Il modo migliore per creare oggetti JavaScript è smettere di usare nuovi (almeno se si è abbonati al campo Crockford)

myObjectType = function(props) {
  // anything defined on props will be private due to the closure

  props.privateVar = "private";

  // anything defined on obj will be public
  obj = {};

  obj.testing = new function() {
    alert(props.privateVar);
  };

  return obj;
};
instance = myObjectType({prop1: "prop"});

// if we want inheritance, it just means starting with the base type instead of
// a new object
subType = function(props) {
  obj = myObjectType(props);
  obj.subTypeProperty = "hello.";

  return obj;
};

Pagina 52 di JavaScript: le parti buone , lo consiglio vivamente : -)

1) direi metodo # 2 è molto preferito, per me comunque. L'esempio con 2 proprietà non è molto diverso, ma cosa succede se si voleva fare questo:

var anotherVariable = new someObjectType({
    property1:    "Some value for this named property",
    property2:    "This is the value for property 2"
    //Leaving several properties out, don't want them populated
    property8:    "This is the value for property 8"
    property9:    "This is the value for property 9"

});  

Pensate a quante combinazioni di sovraccarichi (o tenere traccia delle nulls) dovreste avere per immobili maniglia si può o non può decidere di fornire l'oggetto con il primo metodo. Questo è un molto approccio più estensibile e flessibile.

2) Basta lasciarlo con un costruttore vuoto, questo sarebbe molto più pulito per l'istanza.

3) Lunghezza / leggibilità, soprattutto con più di un paio di oggetti. Guardate JSON, è abbastanza pulito / leggibile, di nuovo, almeno per me, se vi piace questo stile, la creazione di array di oggetti Look molto simili nel metodo # 2.

Bene, il secondo modo sembra bello ed è utile nel caso di una "classe", che ha un sacco di opzioni di configurazione. Tuttavia, essere consapevoli del fatto che si sta effettivamente costruendo un altro oggetto nel processo.

vi consiglio di leggere un codice da uno o un altro framework JavaScript e trovare uno stile che fa appello a voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top