Skip to content

Instantly share code, notes, and snippets.

@alcuadrado
Created September 14, 2010 04:59
Show Gist options
  • Save alcuadrado/578573 to your computer and use it in GitHub Desktop.
Save alcuadrado/578573 to your computer and use it in GitHub Desktop.
A Javascript pseudoclasical inheritance demo
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<script>
"use strict";
window.console = window.console || {};
window.console.log = window.console.log || function () {};
var ns = {};
ns.inherits = function(childConstructor, parentConstructor) {
function C() {};
C.prototype = parentConstructor.prototype;
childConstructor.prototype = new C();
childConstructor.prototype.constructor = childConstructor;
};
ns.Person = function Person () {
if (! this instanceof Person) {
return new Person();
}
}
ns.Person.prototype.name = "John";
ns.Person.prototype.surname = "Smith";
ns.Policeman = function Policeman () {
if (! this instanceof Policeman) {
return new Policeman();
}
}
ns.inherits(ns.Policeman, ns.Person);
ns.Policeman.prototype.weapon = "AK-47";
var p = new ns.Person();
p.name = "Peter";
var q = new ns.Person();
var r = new ns.Policeman();
r.name = "Peter";
var s = new ns.Policeman();
s.weapon = "Magnum";
var t = new ns.Policeman();
window.console.log("ns.Person: %o", ns.Person);
window.console.log("ns.Person.__proto__: %o", ns.Person.__proto__);
window.console.log("ns.Person.prototype: %o", ns.Person.prototype);
window.console.log("ns.Person.prototype.__proto__: %o", ns.Person.prototype.__proto__);
window.console.log("p: %o", p);
window.console.log("q: %o", q);
window.console.log("p.__proto__: %o", p.__proto__);
window.console.log("q.__proto__: %o", q.__proto__);
window.console.log("p.__proto__ === ns.Person.prototype: %o", p.__proto__ === ns.Person.prototype);
window.console.log("q.__proto__ === ns.Person.prototype: %o", q.__proto__ === ns.Person.prototype);
window.console.log("ns.Policeman: %o", ns.Policeman);
window.console.log("ns.Policeman.__proto__: %o", ns.Policeman.__proto__);
window.console.log("ns.Policeman.prototype: %o", ns.Policeman.prototype);
window.console.log("ns.Policeman.prototype.__proto__: %o", ns.Policeman.prototype.__proto__);
window.console.log("ns.Policeman.prototype.__proto__ == ns.Person.prototype: %o", ns.Policeman.prototype.__proto__ == ns.Person.prototype);
window.console.log("r: %o", r);
window.console.log("s: %o", s);
window.console.log("t: %o", t);
window.console.log("r.__proto__: %o", r.__proto__);
window.console.log("s.__proto__: %o", s.__proto__);
window.console.log("t.__proto__: %o", t.__proto__);
window.console.log("r.__proto__ === ns.Policeman.prototype: %o", r.__proto__ === ns.Policeman.prototype);
window.console.log("s.__proto__ === ns.Policeman.prototype: %o", s.__proto__ === ns.Policeman.prototype);
window.console.log("t.__proto__ === ns.Policeman.prototype: %o", t.__proto__ === ns.Policeman.prototype);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment