1: // questo script dipende da "person.js" e da "student.js", che verranno
2: // caricati e valutati da RequireJS, il quale eseguirà la funzione passata
3: // come secondo parametro al termine della risoluzione del grafo delle dipendenze
4: require(["person","student"], function(personModule,studentModule) {
5: //qui person.js e student.js sono stati caricati, lanciamo il "main"
6: runMain(personModule,studentModule);
7: });
8:
9: // Questa funzione rappresenta l'entry-point della nostra applicazione
10: function runMain(Person,Student) {
11:
12: // Istanziamo due persone
13: var person1=new Person();
14: var person2=new Person();
15:
16: // Invochiamo dei metodi (pubblici o privilegiati)
17: person1.sayName();
18: person1.sayAge();
19:
20: // Settiamo una proprietà
21: person1.name="Rick";
22:
23: // Proviamo a settare un field privato (nessuna eccezione, ma non ha effetto!)
24: person1._age=19;
25:
26: // Verifichiamo lo stato di "person1"
27: person1.sayName();
28: person1.sayAge();
29:
30: // Eseguiamo il metodo privilegiato e riverifichiamo che "_age" sia cambiato
31: person1.setAge(20);
32: person1.sayAge();
33:
34: // Verifichiamo che l'altra istanza ha il suo stato distinto da "person1"
35: person2.sayName();
36: person2.sayAge();
37:
38: // Proprietà statica, esposta solo da Person, non dalle sue istanze
39: console.info(Person.s_Description);
40: console.info(person1.s_Description);
41:
42: // Istanziamo la classe Student, nel primo caso senza passare parametri al ctor
43: var student1 = new Student();
44: var student2 = new Student("Camerino");
45:
46: // settiamo una proprietà erediatata
47: student1.name="Jeffrey";
48:
49: // verifichiamo l'override
50: student1.sayHello();
51:
52: // verifichiamo i metodi della classe base e l'accesso ai field della classe base
53: student1.sayName();
54: student1.walk();
55:
56: // verifichiamo che il ctor ha inizializzato (se eseguito con parametri)
57: // correttamente field o proprietà
58: student2.school="MIT";
59: student2.saySchoolAndCity();
60: student1.saySchoolAndCity();
61:
62: // eseguiamo un metodo definito solo in Student
63: student1.sayGoodBye();
64:
65: // verifichiamo che le istanze hanno stato distinto
66: student2.name="Henry";
67:
68: console.info(student1.name);
69: console.info(student2.name);
70:
71: // verifichiamo la "tipizzazione"
72: console.info(student1 instanceof Person);
73: console.info(student1 instanceof Student);
74: console.info(person1 instanceof Person);
75: console.info(person2 instanceof Student);
76:
77: }