La documentazione non spiega molto bene, ma è un argomento molto difficile.
A proposito, ora vive a: http://emberjs.com/guides/object-model/reopening-classes-and-instances/
Uno dei problemi con il parlare di programmazione orientata agli oggetti è che è spesso spiegato in questo modo: - Gli oggetti sono oggetti. Gli oggetti sono istanze di una classe. - Le classi sono oggetti. - Le istanze sono oggetti e hanno una classe.
Questa spiegazione non aiuta chiunque a tutti, e sembra essere un problema ricorsiva (cioè non c'è fine al riferimento ... Un oggetto è un'istanza di una classe che è un oggetto ... (ripetere)).
preferisco ragionare nel modo seguente:
Quando le persone scrivono codice, spesso descrivono le classi e le istanze. Le classi sono un tipo di cosa. La frutta è un esempio di classe. Non stiamo parlando di una cosa particolare qui, stiamo parlando di un'intera "classe" di cose (da cui il nome).
Si noti che non è una vera classe. È reale solo quando è "live" e "in memoria nel computer". Fino ad allora, è una descrizione di una classe. Di solito quando le persone scrivono il codice, scrivono del testo in un file di testo, e questa è solo una descrizione del codice reale all'interno del computer che accade quando il computer lo interpreta o lo compila nel codice macchina.
Il trucco arriva quando ci si rende conto che anche una classe è di per sé una descrizione.È una descrizione di un'intera gamma di oggetti potenzialmente reali.
Nel computer, quando si crea "una mela", questa è un'istanza. È anche un oggetto. La sua classe è Apple, che in un computer è anche un vero oggetto dal vivo. Quando abbiamo parlare di Apple, è un'idea. Non esiste nella realtà, ma per un computer usare qualcosa deve farla esistere nella sua realtà, quindi "Apple" è un oggetto concreto, reale, anche se è anche un'astrazione.
Penso che l'ultimo punto sia quello che fa confondere le persone sugli oggetti. Le classi sono astrazioni, ma affinché il computer possa parlare e ragionare su di esse, devono essere rese reali. Quindi, decidiamo ... "classe significa astratto, istanza significa reale" ...
Il problema è che abbiamo un'eredità ... che porta l'idea di livelli di astrazione ... quindi nel nostro modello di frutta, hai la mela particolare di fronte a te, che è anche un frutto, e anche la frutta è un alimento. In realtà, il cibo in realtà non esiste come una cosa o un insieme di cose, a meno che non diciamo "questo cibo, questa mela" o "tutto il cibo del mondo" o "le lasagne di tua madre", quindi è un'idea astratta ...
Quindi, nel nostro computer orientato agli oggetti, diciamo "definire cibo che è un tipo di oggetto, ora definiamo la frutta che è un tipo di cibo, ora definiamo la mela che è una specie di frutto, ora definisci questo mela, che è una specie di mela ".
Ora questo significa: - L'oggetto è la classe di Cibo e Cibo è un'istanza di Oggetto e anche il Cibo è di per sé una classe! - Il cibo è la classe di Fruit, e Fruit è un'istanza di Food, e Fruit è di per sé anche una classe! - La frutta è di classe Apple e Apple è un'istanza di Fruit, e Apple è anche essa stessa una classe! - La mela è la classe della tua mela e la tua mela è un'istanza della mela (e quindi anche di frutta, cibo e oggetti!). Tuttavia, NON è una classe, è solo un oggetto.
Per ragionare sulla tua mela, potremmo dire che è un oggetto (nota in maiuscolo o), è anche una mela, un frutto e un cibo, e ... ecco il kicker .. è anche un oggetto.
Quindi ora speriamo di essere in una posizione in cui possiamo capire che la tua mela è un oggetto, un'istanza (di Apple, Fruit, Food & Object), una mela, un frutto, un cibo e un oggetto, ma non è una classe.
Quindi ... se si aggiunge un metodo di istanza a una classe, non sarà disponibile nella classe, ma sarà disponibile su tutte le istanze di tale classe. Se aggiungi un metodo di classe, sarà disponibile su quella classe (e sottoclassi). Quindi, se aggiungi un metodo di istanza ad Apple, tutte le istanze di Apple saranno in grado di eseguire tale metodo. Se aggiungi un metodo solo alla tua mela, però, solo la tua mela avrà quel metodo. La mia mela no. Se aggiungi un metodo di classe ad Apple, solo la classe Apple sarà in grado di eseguire quel metodo (che, comodamente, puoi accedere anche attraverso tutte le sue istanze). I metodi di classe sono per le cose che non cambiano le istanze PARTICOLAR. I metodi di istanza sono per le cose che cambiano le istanze PARTICOLAR (generalmente). La stessa cosa vale per proprietà/attributi. Non si creerebbe un metodo di classe nella classe Apple chiamato "Apple color" perché sembra che si riferisca alle particolari Mele (cioè istanze). Spero che questo chiarisca un po 'la questione :)
[questo] (http://stackoverflow.com/questions/10269372/ember-js-how-does-reopenclass-work) la domanda può aiutarti. – coderatchet