Con questo codice
var car = class Car{ /* ... */ }
var carNew = new Car("ferrari");
throws an error, why?
Car
non è entrato nel campo di applicazione perché hai scritto un classe di espressione, simile ad usare function
in un'espressione funzione di
var foo = function Bar() {};
foo; // defined
Bar; // undefined
var carNew = new car("ferrari");
works, why?
Per lo stesso ragionamento di cui sopra, l'identificatore car
è definito nella vostra portata e punti per l'espressione classe
What is use of named or unnamed class expression [...]?
consente di guardare indietro a function
di nuovo. Quindi ora pensi che se lo Bar
non fosse definito nell'ambito che stavamo lavorando, dov'era definito?
Beh, ovviamente abbiamo foo.name === 'Bar'
, ma potremmo anche fare
var foo = function Bar() {console.log(Bar)};
foo(); // Bar logged, we see Bar === foo here
Grande, in modo che possiamo fare riferimento Bar
all'interno della funzione.
E 'esattamente lo stesso con class
, siamo in grado di fare riferimento Car
dall'interno della espressione classe sé, facendoci fare comportamenti ricorsive o copiare i riferimenti statici alle istanze ecc
Ho una tale riferimento alla Rendilo facile vedere nel codice sottostante
var car = class Car {
constructor(model) {
this.model = model;
this.foo = Car; // the big C Car that was ReferenceErroring outside
}
};
var bar = new car();
console.log(bar.foo); // logs class Car (=== car)
Che errore viene generato? – Amit
Uncaught ReferenceError: Car non è definito –
codice precedente non genererà un errore se usato il nome della classe come "Car", quindi solo genererà l'errore. Voglio capire che cosa è l'uso di espressioni di classe con nome e unamed? abbiamo bisogno di usare l'espressione di classe named –