// DEFINE A CONCEPTUAL PERSON function Person(name, language) { this.myName = name; this.myLanguage = language; } Person.prototype = { myName: undefined, myLanguage: undefined, helloInMyLanguage: function() { throw new Error("Not implemented!"); }, helloInEnglish: function() { return "Hello"; }, speaks: function(language) { if (language == "English") { return true; } else if (language == this.myLanguage) { return true; } else { return false; } }, sayHello: function(otherPerson) { var hello; if (otherPerson.speaks(this.myLanguage)) { hello = this.helloInMyLanguage(); } else { hello = this.helloInEnglish(); } alert(this.myName + ": " + hello); }, } // DEFINE A CONCEPTUAL PERSON FROM CHINA function PersonFromChina(name) { Person.call(this, name, "Chinese"); // call super-constructor this.helloInMyLanguage = function() { return "Ni Hao"; }; this.helloInEnglish = function() { return "Hi"; }; } PersonFromChina.prototype = Object.create(Person.prototype); PersonFromChina.prototype.constructor = PersonFromChina; // DEFINE A CONCEPTUAL PERSON FROM THE UNITED STATES function PersonFromUnitedStates(name) { Person.call(this, name, "English"); // call super-constructor this.helloInMyLanguage = function() { return this.helloInEnglish(); }; } PersonFromUnitedStates.prototype = Object.create(Person.prototype); PersonFromUnitedStates.prototype.constructor = PersonFromUnitedStates; // DEFINE A CONCEPTUAL AMERICAN COWBOY function AmericanCowboy(name) { PersonFromUnitedStates.call(this, name); // call super-constructor this.helloInEnglish = function() { return "Howdy!"; } } AmericanCowboy.prototype = Object.create(PersonFromUnitedStates.prototype); AmericanCowboy.prototype.constructor = AmericanCowboy; // DEFINE A CONCEPTUAL AMERICAN STUDENT function AmericanStudent(name) { PersonFromUnitedStates.call(this, name); // call super-constructor this.helloInEnglish = function() { return "What's up?"; }; } AmericanStudent.prototype = Object.create(PersonFromUnitedStates.prototype); AmericanStudent.prototype.constructor = AmericanStudent; // CREATE A COLLECTION OF ACTUAL PEOPLE var People = { cowboy: new AmericanCowboy("John Wayne"), student1: new AmericanStudent("David Spurgeon"), student2: new AmericanStudent("Lara Spurgeon"), student3: new PersonFromChina("Wang Xuesheng"), student4: new PersonFromChina("Sun Xuesheng"), } // DEFINE A CONCEPTUAL ENCOUNTER var Encounter = { begin: function(person1, person2) { person1.sayHello(person2); person2.sayHello(person1); }, close: function() { console.log("The End"); } } /* MAKE AN ENCOUNTER HAPPEN! */ // BEGIN AN ACTUAL ENCOUNTER... Encounter.begin(People.cowboy, People.student3); // ...THEN CLOSE THE ENCOUNTER. Encounter.close();