This neat javascript pattern just came to my mind. Consider this class constructor:
var Base = function(o) { for (var i in o) this[i] = o[i]; }
Pretty basic constructor, right? This class can have a prototype and we can subclass it like so:
Base.prototype = {a : 1}; var Sub = new Base({b : 2}); var sub = new Sub(); sub.a == 1; //true sub.b == 2; //true
It just occurred to me that since a constructor is a function, it can also be call()'ed, like so:
var A = function() {}; A.prototype = {a : 1}; var B = function() {}; B.prototype = {b : 2}; Base.call(B.prototype, A.prototype); //class B extends class A var a = new A(); var b = new B(); Base.call(b, a); //instance b extends instance A Base.call(b, A.prototype); //instance b extends class A Base.call(B, A); //static B extends static A
I've seen the extend() pattern pretty much everywhere but I haven't come across anything that uses this same Base function as a class constructor as well as an general purpose "extend()" / "clone()". I wonder if anyone uses it like this.
No comments:
Post a Comment