Pseudo-classical inheritance (through prototyping): | function A() {
this.pro1 = 'pro1 ';
this.method1 = function() {
return this.pro1
}
}
function B() {
this.pro2 = 'pro2 ';
this.method2 = function() {
return this.pro1 + this.pro2;
};
}
B.prototype = new A();
function C() {
this.pro3 = 'pro3 ';
this.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
}
C.prototype = new B();
inst = new C()
inst.method3()
| ready |
Function application or "constructor chaining" | function A() {
this.pro1 = 'pro1 ';
this.method1 = function() {
return this.pro1
}
}
function B() {
this.pro2 = 'pro2 ';
this.method2 = function() {
return this.pro1 + this.pro2;
};
A.apply(this, arguments);
}
function C() {
this.pro3 = 'pro3 ';
this.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
B.apply(this, arguments);
}
inst = new C()
inst.method3()
| ready |
Parasitic inheritance or Power Constructors | function A() {
var A = {
pro1: 'pro1 ',
method1: function() {
return this.pro1
}
};
return A;
}
function B() {
var obj = A();
obj.pro2 = 'pro2 ';
obj.method2 = function() {
return this.pro1 + this.pro2;
};
return obj;
}
function C() {
var obj = B();
obj.pro3 = 'pro3 ';
obj.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
return obj;
}
inst = C();
inst.method3()
| ready |
ECMAScript 5th Ed. Object.create method: | var A = {
pro1: 'pro1 ',
method1: function() {
return this.pro1
}
};
var B = Object.create(A);
B.pro2 = 'pro2 ';
B.method2 = function() {
return this.pro1 + this.pro2;
};
var C = Object.create(B);
C.pro3 = 'pro3 ';
C.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
C.method3();
| ready |
Parasitic inheritance or Power Constructors (With for) | function A() {
var A = {
pro1: 'pro1 ',
method1: function() {
return this.pro1
}
};
return A;
}
function B() {
var obj = {};
obj.pro2 = 'pro2 ';
obj.method2 = function() {
return this.pro1 + this.pro2;
};
var a = A();
for (i in a)
obj[i] = a[i];
return obj;
}
function C() {
var obj = {};
obj.pro3 = 'pro3 ';
obj.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
var b = B();
for (i in b)
obj[i] = b[i];
return obj;
}
inst = C();
inst.method3()
| ready |
augment.js | var A = Object.augment(function() {
this.constructor = function() {}
this.pro1 = 'pro1 ';
this.method1 = function() {
return this.pro1
}
});
var B = A.augment(function(base) {
this.constructor = function() {}
this.pro2 = 'pro2 ';
this.method2 = function() {
return this.pro1 + this.pro2;
};
});
var C = B.augment(function(base) {
this.constructor = function() {}
this.pro3 = 'pro3 ';
this.method3 = function() {
return this.pro1 + this.pro2 + this.pro3 + this.method1() + this.method2();
};
});
inst = new C();
inst.method3()
| ready |