Revision: 8098
Updated Code
at January 5, 2009 16:30 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Object inheritance setup ***// //Set up protected member access for derived classes //Protected members aren't really supported in JavaScript, but here's a way to implement them. var protected = {}; this.setupProtected = function() { if(!(this.setupProtected.caller.prototype instanceof BaseClass)) throw (new ReferenceError("setupProtected is not defined")); var p = {}; p.get = function(str){ return protected[str]; }; p.set = function(str, val){ return (protected[str] = val); }; return p; }; //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return privateVar; }; //*** Protected members; only accessible within this class and derived classes ***// protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return protected.protectedVar; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ this.publicFunc = function(){ return publicVar; }; } //*** static methods/properties ***/ //these are not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { //*** Object inheritance setup ***// BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor this.constructor = SubClass; //reference this function as the object's constructor var baseProtected = this.setupProtected(); //Note: do not call this within a member function or it won't work //Protected members of BaseClass can now be accessed using, e.g.: // baseProtected.get("protectedVar") // baseProtected.set("protectedVar", 42) //Set up protected member access for derived classes //Protected members aren't really supported in JavaScript, but here's a way to implement them. //This implementation is different from that in BaseClass because if the protected member is // not defined in SubClass it continues up the chain to look in BaseClass for it. var protected = {}; this.setupProtected = function() { if(!(this.setupProtected.caller.prototype instanceof SubClass)) throw (new ReferenceError("setupProtected is not defined")); var p = {}; p.get = function(str) { var v; if(typeof protected[str] != "undefined") v = protected[str]; else v = baseProtected.get(str); //try accessing inherited member return v; }; p.set = function(str, val) { var v; if(typeof protected[str] != "undefined") v = protected[str] = val; else v = baseProtected.set(str, val); //try setting inherited member return v; }; return p; }; //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass //*** static methods/properties ***/ //...
Revision: 8097
Updated Code
at October 1, 2008 15:06 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //Note that in cases like this where the function doesn't require the closure, it would be more // efficient to make it a property of the prototype (or better yet, a static property of the class // itself since it doesn't use the |this| keyword either). That *would* make it public, though. //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them. //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) { var p = {}; p.get = function(str){ return protected[str]; }; p.set = function(str, val){ return (protected[str] = val); }; return p; } throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return protected.protectedVar; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor this.constructor = SubClass; //reference this function as the object's constructor var prot = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., prot.get("protectedVar") or // prot.set("protectedVar", 15) //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) { var p = {}; p.get = function(str) { var v; if(protected[str] !== undefined) v = protected[str]; else v = prot.get(str); //try accessing inherited member return v; }; p.set = function(str, val) { var v; if(protected[str] !== undefined) v = protected[str] = val; else v = prot.set(str, val); //try setting inherited member return v; }; return p; } throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8096
Updated Code
at September 22, 2008 15:36 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val; try{ val = eval("protected."+str); }catch(e){} if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.constructor = SubClass; //reference this function as the object's constructor this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8095
Updated Code
at September 22, 2008 15:29 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor this.constructor = SubClass; //reference this function as the object's constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val; try{ val = eval("protected."+str); }catch(e){} if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8094
Updated Code
at September 22, 2008 15:28 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor this.constructor = SubClass; var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val; try{ val = eval("protected."+str); }catch(e){} if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8093
Updated Code
at September 4, 2008 09:48 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val; try{ val = eval("protected."+str); }catch(e){} if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8092
Updated Code
at September 4, 2008 09:47 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val; try{ val = eval("protected."+str); }catch(e){} if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val = eval("protected."+str); if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8091
Updated Code
at September 4, 2008 09:37 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str) { var val = eval("protected."+str); if(val === undefined) val = getProtected(str); //try accessing inherited member return val; }; throw (new ReferenceError("setupProtected is not defined")); }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8090
Updated Code
at September 4, 2008 09:03 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; throw (new ReferenceError("setupProtected is not defined")); }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Note: do not call this within a function or it won't work //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str){ return eval("protected."+str); }; return undefined; }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8089
Updated Code
at September 4, 2008 08:39 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Protected members aren't really supported in JavaScript, but here's a way to implement them //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof BaseClass) return function(str){ return eval("protected."+str); }; return undefined; }; protected.protectedVar = "Protected"; protected.protectedFunc = function(){ return "Protected"; }; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; //Could use getters & setters, but IE doesn't support them. Example: /*this.__defineGetter__("publicVar", function(){ return "Public"; }); this.__defineSetter__("publicVar", function(v){ publicVar = v; });*/ } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor var getProtected = this.setupProtected(); //Protected members of BaseClass can now be accessed using, e.g., getProtected("protectedVar") //*** Private members; only accessible within this class ***// //... //*** Protected members; only accessible within this class and derived classes ***// //Set up protected member access for derived classes var protected = {}; this.setupProtected = function() { if(this.setupProtected.caller.prototype instanceof SubClass) return function(str){ return eval("protected."+str); }; return undefined; }; //... //*** Public members ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8088
Updated Code
at September 2, 2008 16:48 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //Not supported in JavaScript //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor //*** Private and Public members specific to SubClass ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8087
Updated Code
at September 2, 2008 14:21 by wizard04
Updated Code
//static object (it's like Math) var StaticObject = function() { //*** Private members ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Public members ***// return { publicVar: "Public", getPrivateVar: function(){ return privateVar; }, setPrivateVar: function(v){ privateVar = v; } //Could use getters & setters instead, but IE doesn't support them. Example: /*get privateVar(){ return privateVar; }, set privateVar(v){ privateVar = v; }*/ }; }(); //base class; inherits Object function BaseClass(arg1, arg2) { //*** Private members; only accessible within this class ***// var privateVar = "Private"; function privateFunc(){ return "Private"; }; //*** Protected members; only accessible within this class and derived classes ***// //To make a member protected, use either getters & setters (preferred, but IE doesn't support them) or // public functions var protectedVar = "Protected"; function getProtectedVar() { //if the calling function is a derived class if(getProtectedVar.caller.prototype instanceof BaseClass) return protectedVar; var undef; return undef; } function setProtectedVar(v) { //if the calling function is a derived class if(setProtectedVar.caller.prototype instanceof BaseClass) protectedVar = v; } //using getters & setters: /*this.__defineGetter__("protectedVar", getProtectedVar); this.__defineSetter__("protectedVar", setProtectedVar);*/ //using public functions; these are publicly defined, but only take action for derived classes: this.getProtectedVar = getProtectedVar; this.setProtectedVar = setProtectedVar; //*** Public members ***// this.toString = function(){ return "[object BaseClass]"; }; //override inherited toString() method this.publicVar = "Public"; this.publicFunc = function(){ return "Public"; }; } //static method of BaseClass class; this is not inherited (it's like String.fromCharCode()) BaseClass.staticMethod = function(){ return "Static"; }; //subclass; inherits BaseClass function SubClass(arg1, arg2) { BaseClass.apply(this, [arg1, arg2]); //construct this object using the BaseClass constructor //*** Private, Protected, and Public members specific to SubClass ***// this.toString = function(){ return "[object SubClass]"; }; //override inherited toString() method //... } SubClass.prototype = new BaseClass(); //put SubClass into the prototype chain as a subclass of BaseClass
Revision: 8086
Updated Code
at September 2, 2008 11:49 by wizard04
Updated Code
function Dog(name) //Dog base class; inherits Object { this.toString = function(){ return "[object Dog]"; }; //override inherited toString() method this.name = name; this.bark = function(){ alert("Ruff!"); }; } //static method of Dog class; this is not inherited Dog.breeds = function(){ /*return ["beagle", "labrador", "border collie", ...];*/ }; function Beagle(name) //Beagle sub-class; inherits Dog class { Dog.apply(this, [name]); //construct this object as a Dog this.toString = function(){ return "[object Beagle]"; }; //override inherited toString() method this.find = function(obj){ alert("Being a hound, finding a(n) "+obj); }; } Beagle.prototype = new Dog(); //put Beagle into the prototype chain under Dog
Revision: 8085
Updated Code
at September 2, 2008 11:24 by wizard04
Updated Code
function Dog(name) //Dog base class; inherits Object { this.toString = function(){ return "[object Dog]"; }; //override inherited toString() method this.name = name; this.bark = function(){ alert("Ruff!"); }; } //static method of Dog class; this is not inherited Dog.breeds = function(){ /*return ["beagle", "labrador", "border collie", ...];*/ }; function Beagle(name) //Beagle class; inherits Dog class { Dog.apply(this, [name]); //construct this object as a Dog this.toString = function(){ return "[object Beagle]"; }; //override inherited toString() method this.find = function(obj){ return "Being a hound, finding a(n) "+obj; }; } Beagle.prototype = new Dog(); //put Beagle into the prototype chain under Dog
Revision: 8084
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 2, 2008 10:48 by wizard04
Initial Code
function Dog(name, birthdate) //Dog base class; inherits Object { this.toString = function(){ return "[object Dog]"; }; //override Object's toString method this.name = name; this.bark = function(){ alert("Ruff!"); }; this.getAge = function() { var now = new Date(); var years = now.getFullYear() - birthdate.getFullYear(); var tmp = new Date(birthdate.getTime()); tmp.setYear(now.getFullYear()); if(now.getTime() < tmp.getTime()) years--; //birthday hasn't occured yet this year return years; } } //static method of Dog class; this is not inherited (it's like String.fromCharCode()) Dog.breeds = function(){ /*return ["beagle", "labrador", "border collie", ...];*/ }; function Beagle(name, birthdate) //Beagle class; inherits Dog class { Dog.apply(this, [name, birthdate]); //construct this object as a Dog //***** Beagle-specific properties and methods (additions and overrides) *****// this.toString = function(){ return "[object Beagle]"; }; //override Dog's toString method } Beagle.prototype = new Dog(); //put Beagle into the prototype chain under Dog
Initial URL
Initial Description
Initial Title
JavaScript Object Inheritance
Initial Tags
javascript, class, object
Initial Language
JavaScript