1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci * 3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci * You may obtain a copy of the License at 6425bb815Sopenharmony_ci * 7425bb815Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci * 9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci * limitations under the License. 14425bb815Sopenharmony_ci */ 15425bb815Sopenharmony_ci 16425bb815Sopenharmony_ciclass Animal { 17425bb815Sopenharmony_ci constructor (name) { 18425bb815Sopenharmony_ci this.name = name; 19425bb815Sopenharmony_ci } 20425bb815Sopenharmony_ci 21425bb815Sopenharmony_ci hello () { 22425bb815Sopenharmony_ci return "Hello I am " + this.name; 23425bb815Sopenharmony_ci } 24425bb815Sopenharmony_ci 25425bb815Sopenharmony_ci static speak () { 26425bb815Sopenharmony_ci return "Animals roar."; 27425bb815Sopenharmony_ci } 28425bb815Sopenharmony_ci 29425bb815Sopenharmony_ci static explain () { 30425bb815Sopenharmony_ci return "I can walk,"; 31425bb815Sopenharmony_ci } 32425bb815Sopenharmony_ci 33425bb815Sopenharmony_ci whoAmI () { 34425bb815Sopenharmony_ci return "I am an Animal."; 35425bb815Sopenharmony_ci } 36425bb815Sopenharmony_ci 37425bb815Sopenharmony_ci breath () { 38425bb815Sopenharmony_ci return "I am breathing."; 39425bb815Sopenharmony_ci } 40425bb815Sopenharmony_ci 41425bb815Sopenharmony_ci get myName () { 42425bb815Sopenharmony_ci return this.name; 43425bb815Sopenharmony_ci } 44425bb815Sopenharmony_ci 45425bb815Sopenharmony_ci set rename (name) { 46425bb815Sopenharmony_ci this.name = name; 47425bb815Sopenharmony_ci } 48425bb815Sopenharmony_ci} 49425bb815Sopenharmony_ci 50425bb815Sopenharmony_ciclass Dog extends Animal { 51425bb815Sopenharmony_ci constructor (name, barks) { 52425bb815Sopenharmony_ci super (name); 53425bb815Sopenharmony_ci this.barks = barks; 54425bb815Sopenharmony_ci } 55425bb815Sopenharmony_ci 56425bb815Sopenharmony_ci hello () { 57425bb815Sopenharmony_ci return super.hello () + " and I can " + (this.barks ? "bark" : "not bark"); 58425bb815Sopenharmony_ci } 59425bb815Sopenharmony_ci 60425bb815Sopenharmony_ci whoAmI () { 61425bb815Sopenharmony_ci return "I am a Dog."; 62425bb815Sopenharmony_ci } 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_ci static speak () { 65425bb815Sopenharmony_ci return "Dogs bark."; 66425bb815Sopenharmony_ci } 67425bb815Sopenharmony_ci 68425bb815Sopenharmony_ci static explain () { 69425bb815Sopenharmony_ci return super.explain () + " jump,"; 70425bb815Sopenharmony_ci } 71425bb815Sopenharmony_ci 72425bb815Sopenharmony_ci bark () { 73425bb815Sopenharmony_ci return this.barks ? "Woof" : "----"; 74425bb815Sopenharmony_ci } 75425bb815Sopenharmony_ci} 76425bb815Sopenharmony_ci 77425bb815Sopenharmony_ciclass Doge extends Dog { 78425bb815Sopenharmony_ci constructor (name, barks, awesomeness) { 79425bb815Sopenharmony_ci super (name, barks); 80425bb815Sopenharmony_ci this.awesomeness = awesomeness; 81425bb815Sopenharmony_ci } 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_ci hello () { 84425bb815Sopenharmony_ci return super.hello () + " and I'm " + (this.awesomeness > 9000 ? "super awesome" : "awesome") + "."; 85425bb815Sopenharmony_ci } 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_ci whoAmI ( ) { 88425bb815Sopenharmony_ci return "I am a Doge."; 89425bb815Sopenharmony_ci } 90425bb815Sopenharmony_ci 91425bb815Sopenharmony_ci static speak () { 92425bb815Sopenharmony_ci return "Doges wow."; 93425bb815Sopenharmony_ci } 94425bb815Sopenharmony_ci 95425bb815Sopenharmony_ci static explain () { 96425bb815Sopenharmony_ci return super.explain () + " dance."; 97425bb815Sopenharmony_ci } 98425bb815Sopenharmony_ci} 99425bb815Sopenharmony_ci 100425bb815Sopenharmony_civar doge = new Doge ("doggoe", true, 10000); 101425bb815Sopenharmony_ciassert (doge.name === "doggoe"); 102425bb815Sopenharmony_cidoge.rename = "doggo"; 103425bb815Sopenharmony_ciassert (doge.myName === "doggo"); 104425bb815Sopenharmony_ciassert (doge.barks === true); 105425bb815Sopenharmony_ciassert (doge.awesomeness === 10000); 106425bb815Sopenharmony_ciassert (doge.hello () === "Hello I am doggo and I can bark and I'm super awesome."); 107425bb815Sopenharmony_ciassert (doge.whoAmI () === "I am a Doge."); 108425bb815Sopenharmony_ciassert (doge.breath () === "I am breathing."); 109425bb815Sopenharmony_ciassert (doge.bark () === "Woof"); 110425bb815Sopenharmony_ciassert (Doge.speak () === "Doges wow."); 111425bb815Sopenharmony_ciassert (Doge.explain () === "I can walk, jump, dance."); 112425bb815Sopenharmony_ciassert (doge instanceof Animal); 113425bb815Sopenharmony_ciassert (doge instanceof Dog); 114425bb815Sopenharmony_ciassert (doge instanceof Doge); 115425bb815Sopenharmony_ciassert (Dog.prototype.constructor === Dog) 116425bb815Sopenharmony_ciassert (Doge.prototype.constructor === Doge) 117