Javascript Inheritance
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#More_flexible_constructors
JavaScript
function Employee (name, dept) {
this.name = name || "";
this.dept = dept || "";
alert('Employee function');
}
function Programmer (name, projs) {
Employee.call(this, name, "programming");
this.projects = projs || [];
alert('Programmer function');
}
alert('Programmer inherit Employee');
Programmer.prototype = new Employee;
// demo dynamic inheritance
alert('add new property leave to Employee');
Employee.prototype.leave = 10;
alert('construct Johnny');
var johnny = new Programmer("Johnny", ["C#","Java"]);
alert("name: " + johnny.name + "\n"
+ "dept: " + johnny.dept + "\n"
+ "projects: " + johnny.projects + "\n"
+ "leave: " + johnny.leave);
alert('construct Mary');
var mary = new Programmer("Mary", ["Javascript","Java"]);
alert("name: " + mary.name + "\n"
+ "dept: " + mary.dept + "\n"
+ "projects: " + mary.projects + "\n"
+ "leave: " + mary.leave);
alert("changing leave of all staff to 8");
Employee.prototype.leave = 8;
alert("Johnny leave: " + johnny.leave);
alert("Mary leave: " + mary.leave);
alert("cannot batch move staff to another department");
Employee.prototype.dept = "sales";
alert("Johnny dept: " + johnny.dept);
alert("Mary dept: " + mary.dept);