1 //1.prototype chain inheritance
2 function SuperType() {
3 this.property = true;
4 }
5 SuperType.prototype.getSuperValue = function () {
6 return this.property;
7 };
8 function SubType() {
9 this.subproperty = false;
10 }
11
12 //inherited from SuperType
13 SubType.prototype = new SuperType();
14 SubType.prototype.getSubValue = function () {
15 return this.subproperty;
16 };
17
18 //2.constructor stealing inheritance
19 function SuperType() {
20 this.colors = ["red","blue","green"];
21 }
22 function SubType() {
23 //inherited from SuperType
24 SuperType.call(this);
25 }
26
27 //3.combination inheritance
28 function SuperType(name) {
29 this.name = name;
30 this.colors = ["red", "blue", "green"];
31 }
32 SuperType.prototype.sayName = function () { alert(this.name); };
33 function SubType(name,age) {
34 //inherit properties
35 SuperType.call(this, name); //second call superType()
36 this.age = age;
37 }
38 //inherit method
39 SubType.prototype = new SuperType(); //first call superType()
40 SubType.prototype.sayAge = function () { alert(this.age); };
41
42 //4.prototypal inheritance in javascript
43 function object(o) {
44 function F() { }
45 F.prototype = o;
46 return new F();
47 }
48
49 //5.parasitic inheritance
50 function createAnother(original) {
51 var clone = object(original);
52 clone.sayHi = function () { alert("hi"); };
53 return clone;
54 }
55
56 //6.parasitic combinate inheritance
57 function inheritPrototype(subType, superType) {
58 var prototype = object(superType.prototype);
59 prototype.constructor = subType;
60 subType.prototype = prototype;
61 }
62 function SuperType(name) {
63 this.name = name;
64 this.colors = ["red","blue","green"];
65 }
66 SuperType.prototype.sayName = function () { alert(this.name); };
67
68 function SubType(name, age) {
69 SuperType.call(this, name);
70 this.age = age;
71 }
72 inheritPrototype(SubType,SuperType);
73 SubType.prototype.sayAge = function () { alert(this.age); };