Direct javascript inheritance
Implementation:
var _with = function(proto, overrides) {
if (!overrides) overrides = {};
// that's the trick
var ctor = function() { this.__proto__ = proto; };
ctor.prototype = proto;
var child = new ctor();
// 'child'.[[Prototype]] pseudoproperty is set to 'proto' now
// and real 'child.__proto__' property added
for (var prop in overrides)
if (overrides.hasOwnProperty(prop))
child[prop] = overrides[prop];
return child;
};
Usage example:
var Clazz = {
x: 10,
y: 20,
method: function() {
return this.x;
},
method2: function() {
return this.__proto__.x; // referencing parent
}
};
var DerivedClazz = _with(Clazz, {x: 15});
var instance = _with(DerivedClazz);
alert(instance.y); // 20
instance.x = 100;
alert(instance.x); // 100
alert(instance.method()); // 100
alert(instance.method2()); // 15
alert(DerivedClazz.x); // 15
alert(Clazz.x); // 10
As described here: http://tonsky.livejournal.com/244260.html
Written by Nikita Prokopov
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Related Tags
#javascript
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#