Modifica: per coloro che vedono questo post in futuro, this site è stato indubbiamente fondamentale per me per digerire Javascript. Se vieni da uno sfondo tradizionale OOP, lo consiglio vivamente. I diagrammi di UML-esq erano fantastici.Apprendimento .prototype
Non riesco ancora a capire cosa sia la proprietà .prototype in Javascript. È semplicemente un riferimento a un altro oggetto? O è un riferimento a un puntatore a un altro oggetto? Vengo da C/C++/x86 e non riesco a vedere come funziona. Diamo un'occhiata ad alcuni esempi di come attualmente vedo le cose; aiuterebbe a segnalare i miei errori per vedere come funzionano le cose. Non so nemmeno se alcuni di questi sono sintassi valida. Object
e Function
sono rispettivamente oggetti oggetto/funzione globali.
1 // Global.prototype = ??
2 // Function.prototype = ??
3
4 var obj1 = {}; // obj1.prototype = Object
5 obj2 = {}; // obj2.prototype = Object
6
7 var func1 = function() {}; // func1.prototype = Function
8 func2 = function() {}; // func2.prototype = Function
9 function func3() {} // func3.prototype = Function
10
Sono così confuso.
11 var Foo = function() { this.prop1 = 0; }
12 var foo = new Foo(); // should it be 'new Foo' or 'new Foo()'?
13 // Foo.prototype = Function
14 // foo.prototype = Foo
15 var Goo = function() { this.prop2 = 0; }
16 var goo = new Goo();
17 // goo.prototype = Goo
18 goo.prototype = new Foo();
19 // goo.prop1 now exists ?
Inoltre non capisco lo scambio di prototipi in giro.
20 function A() {
21 this.prop1 = 1;
22 }
23 function B() {
24 this.prop2 = 2;
25 }
26 function C() {
27 this.prop3 = 3;
28 }
29 C.prototype = new B();
30 var c = new C();
31 // c.prop1 = 1
32 // c.prop2 = 2
33 // c.prop3 = undefined
34 C.prototype = new A();
35 // c.prop2 = 2???
36 // c.prop3 = 3
Non riesco a capire il concetto. Non capisco abbastanza. Non capisco come gli oggetti clonati abbiano le loro copie locali dei dati, ma le modifiche all'oggetto originale (il prototipo) in qualche modo ricadono a cascata sui cloni. Sono stato trafficando con FigureBug provare cose fuori, ma mentalmente non posso venire con un'idea che è coerente con tutti gli esempi Ho visto
C++ può essere un enorme mostro, ma almeno so esattamente che succede. Ecco ... Sto usando la mia ipotesi migliore ... Solo un nuovo paradigma, suppongo. Ad ogni modo, grazie se puoi dare una mano ... Sono sottosopra su questo .prototipo.
Controlla la mia risposta in questa domanda: http://stackoverflow.com/questions/17047025/trying-to-understand-javascript-inheritence/17049716#17049716 – Hoffmann
se chiedi obj.x e obj non ce l'ha possedere la proprietà x, JS verificherà l'esistenza di obj.prototype.x e, se presente, restituirà, altrimenti restituisce undefined. pensala come un inoltro di chiamata per la programmazione, il prototipo è un numero alternativo a cui puoi provare a raggiungere i dati. Poiché si tratta di un telefono diverso, puoi comunque chiamare la linea principale se l'alternativa viene distrutta. – dandavis
@dandavis OK Ottengo lo scenario. Cosa non capisco cosa. Riferimenti di prototipi, cosa è impostato per impostazione predefinita, e cosa succede quando inizio a scambiare i prototipi intorno a – gone