Javascript inheritance structure

Is there a small, lightweight solution for inheriting the javascript class that will work well both on the client side and the server side (node.js)? I don’t want a big library, just something that will allow me to declare a constructor and some methods, and then be able to inherit a class.

+6
source share
6 answers

John Resig describes a simple inheritance structure in about 25 lines of code here . I saw that it was used for a good effect.

You can use it as follows:

var Vehicle = Class.extend({ init: function(wheels) { this.wheels = wheels; } }); var Truck = Vehicle.extend({ init: function(hp, wheels) { this.horsepower = hp; this._super(wheels); }, printInfo: function() { console.log('I am a truck and I have ' + this.horsepower + ' hp.'); } }); var t = new Truck(4, 350); t.printInfo(); 
+6
source
+3
source

I created this small library to use the ExtJs StyleManager class. It is quite simple, but very flexible.

Install via node.js

 npm install esf-core 

Example

 Esf.define('A', { a: null, constructor: function (a) { // Save var this.a = a; // Heyho console.log('A'); }, foo: function (b) { console.log('foo - ' + b); } }); Esf.define('B', { b: null, constructor: function (a, b) { // Call super constructor this.callParent(a); // Save var this.b = b; // Heyho console.log('B'); }, foo: function () { this.callParent('bar'); } }, { extend: 'A' }); // Use var b = new B(1, 2); // or var b = Esf.create('B', 1, 2); /* * Output: * A * B * foo - bar */ b.foo(); 

Repository

https://bitbucket.org/tehrengruber/esf-js-core

+1
source

I saw the successfully used prototype library.

0
source

I think this is much better than init hax in a simple fw inheritance:

 (function() { var core = { require : function(source) { if ( typeof (source) != "object" || !source) throw new TypeError("Object needed as source."); for (var property in source) if (source.hasOwnProperty(property) && !this.prototype.hasOwnProperty(property)) this.prototype[property] = source[property]; }, override : function(source) { if ( typeof (source) != "object" || !source) throw new TypeError("Object needed as source."); for (var property in source) if (source.hasOwnProperty(property)) this.prototype[property] = source[property]; }, extend : function(source) { var superClass = this; var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() { superClass.apply(this, arguments); }; newClass.superClass = superClass; var superClone = function() { }; superClone.prototype = superClass.prototype; newClass.prototype = new superClone(); newClass.prototype.constructor = newClass; if (source) newClass.override(source); return newClass; } }; core.require.call(Function, core); Function.create = function (source){ var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {}; newClass.override(source); return newClass; }; })(); 

An example of a car with this:

 var Vehicle = Function.create({ constructor : function(wheels) { this.wheels = wheels; } }); var Truck = Vehicle.extend({ constructor : function(hp, wheels) { this.horsepower = hp; Vehicle.call(this, wheels); }, printInfo : function() { console.log('I am a truck and I have ' + this.horsepower + ' hp.'); } }); var t = new Truck(4, 350); t.printInfo(); 
0
source

I created a very lightweight library that works in the browser and in node.js. Its super easy to use library without hacking:

Example:

 var Person = proto(function() { // prototype builder this.init = function(legs, arms) { // constructor this.legs = legs this.arms = arms } this.getCaughtInBearTrap = function() { // instance method this.legs -= 1 } this.limbs = function() { return this.arms + this.legs } }) var Girl = proto(Person, function() { // inheritance this.haveBaby = function() { return Person(2,2) } }) var g = Girl(2,2) // instantiation g.getCaughtInBearTrap() console.log("Girl has "+g.limbs()+" limbs") console.log(": (") 
0
source

Source: https://habr.com/ru/post/909156/


All Articles