the following code samples are taken from a great answer posted on Quora by Rick Waldron
i'm keeping them here for future reference.
the following code samples are taken from a great answer posted on Quora by Rick Waldron
i'm keeping them here for future reference.
| class Point { | |
| constructor( x, y ) { | |
| this.x = x; | |
| this.y = y; | |
| } | |
| plus( aPoint ) { | |
| return new Point( this.x + aPoint.x, this.y + aPoint.y ); | |
| } | |
| distance() { | |
| return Math.sqrt( this.x * this.x + this.y * this.y ); | |
| } | |
| } | |
| var p = new Point( 5, 10 ); |
| var Point = (function() { | |
| function Point( x, y ) { | |
| this.x = x; | |
| this.y = y; | |
| } | |
| Point.prototype.plus = function( aPoint ) { | |
| return new Point( this.x + aPoint.x, this.y + aPoint.y ); | |
| }; | |
| Point.prototype.distance = function() { | |
| return Math.sqrt( this.x * this.x + this.y * this.y ); | |
| }; | |
| return Point; | |
| })(); | |
| var p = new Point( 5, 10 ); |
| /* Simple JavaScript Inheritance | |
| * By John Resig http://ejohn.org/ | |
| * MIT Licensed. | |
| */ | |
| // Inspired by base2 and Prototype | |
| (function(){ | |
| var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/: /.*/; | |
| // The base Class implementation (does nothing) | |
| this.Class = function(){}; | |
| // Create a new Class that inherits from this class | |
| Class.extend = function(prop) { | |
| var _super = this.prototype; | |
| // Instantiate a base class (but only create the instance, | |
| // don't run the init constructor) | |
| initializing = true; | |
| var prototype = new this(); | |
| initializing = false; | |
| // Copy the properties over onto the new prototype | |
| for (var name in prop) { | |
| // Check if we're overwriting an existing function | |
| prototype[name] = typeof prop[name] == "function" && | |
| typeof _super[name] == "function" && fnTest.test(prop[name]) ? | |
| (function(name, fn){ | |
| return function() { | |
| var tmp = this._super; | |
| // Add a new ._super() method that is the same method | |
| // but on the super-class | |
| this._super = _super[name]; | |
| // The method only need to be bound temporarily, so we | |
| // remove it when we're done executing | |
| var ret = fn.apply(this, arguments); | |
| this._super = tmp; | |
| return ret; | |
| }; | |
| })(name, prop[name]) : | |
| prop[name]; | |
| } | |
| // The dummy class constructor | |
| function Class() { | |
| // All construction is actually done in the init method | |
| if ( !initializing && this.init ) | |
| this.init.apply(this, arguments); | |
| } | |
| // Populate our constructed prototype object | |
| Class.prototype = prototype; | |
| // Enforce the constructor to be what we expect | |
| Class.constructor = Class; | |
| // And make this class extendable | |
| Class.extend = arguments.callee; | |
| return Class; | |
| }; | |
| })(); | |
| var Foo = Class.extend({ | |
| init: function(isFoo){ | |
| this.foo = isFoo; | |
| }, | |
| getFoo: function(){ | |
| return this.foo; | |
| } | |
| }); | |
| var Bar = Foo.extend({ | |
| init: function() { | |
| // this actually calls the init method | |
| // defined in Foo | |
| this._super( true ); | |
| } | |
| }); | |
| console.log( Foo); | |
| var foo = new Foo(), | |
| bar = new Bar(); | |
| console.log( foo, bar ); |