current broken code: http://jsfiddle.net/9F52n/2/
What I’m trying to do: Learn how to define an object/function that behaves like a class, and be able to define subclasses, both static , and instantiatable (singleton in my example below).
Currently, my code below doesn’t work all that well. but, if the instantiatable class sand the static class were removed, you’ll see that I have the very basics of class creation down.
So, I guess my question is: what is the proper / most semantic way to define nested clases (singleton or otherwise) with the way I’ve defined TBR? (function(){...})(window)
var TBR = (function() {
// define local copy of taco bell run
var TBR = function() {
return new TBR.fn.init();
},
message = "hello world!";
TBR.fn = TBR.prototype = {
constructor: TBR,
init: function() {
console.log("From TBR Constructor: " + message);
}
}
var InstantiatableClass = function() {
return new TBR.InstantiatableClass, fn.init();
}
InstantiatableClass.fn =InstantiatableClass.prototype = {
constructor: TBR.InstantiatableClass,
init: function() {
console.log("from InstantiatableClass: " + message);
}
}
this.staticClass = function() {
var subMessage = "little world";
init = function() {
console.log("from staticClass: " + subMessage);
}
}
// expose TBR to the window object
window.TBR = TBR;
})(window);
This does not work. Your
InstantiatableClasslocal variable returns objects, the prototype will not get applied to them. Also,TBR.InstantiatableClassis defined nowhere. If that is what you wanted, you’d need to useAlso, you should not [need to] overwrite the prototypes. Sure, the only difference is that
constructoris enumerable now (as far as it is not forgotten), but the following would be much cleaner:Oh, you want something that works like jQuery. Imho you should not make the constructor (
init) a property of the prototype – that is just very odd and I can’t see a reason to do so. I’d suggest this code: