I had written a non-prototype several years ago like this:
var _singletons = []; // for storing singleton instances of objects
Function.prototype.singleton = function (o) {
if(!_singletons[this.name]) {
_singletons[this.name] = o;
return false;
}
return true;
}
Function.prototype.getSingleton = function () {
return _singletons[this.name];
}
then you define a class like this:
function AClass() {
if AClass.singleton(this) return AClass.getSingleton();
this.a = a;
/* etc */
}
That way you can call var a = new AClass() as many times as you like
and it'd return the same object instance every time. Which I think is
close to a real singleton instance of an object.
But I don't think you could do that readily with Prototype using the
Class.create() mechanism.
On 22/05/06, Nicolas Terray <nicolas.terray@gmail.com>
wrote:> On 5/22/06, Grzesiek Slusarek <gregtech@wp.pl> wrote:
> > Hello all. I'm writing my own object using prototype and I
> > wonder how you write and call only one instance of class. Can
> > anyone share his idea of singleton?
> > thanks
> > Gregor
> >
>
> Here is my proposal :
> ---8<----------------------
> <script>
> var Foo = Class.create();
> Object.extend(Foo.prototype, {
> initialize: function() {
> this.a = 5;
> }
> });
> Object.extend(Foo, {
> instance: function() {
> if (!this._instance) {
> this._instance = new Foo();
> }
> return this._instance;
> }
> });
> var o1 = Foo.instance();
> var o2 = Foo.instance();
> alert(o1.a + ' ' + o2.a);
> o2.a = 10;
> alert(o1.a + ' ' + o2.a);
>
> </script>
> ---8<----------------------
>
> Anyway it is not a real singleton since it is possible to call the
> constructor outside from instance()
> Furthermore, by hacking Foo, I do not know if I break something by
> adding _instance and instance() :-\
>
> Yours,
> Nicolas Terray
> _______________________________________________
> Rails-spinoffs mailing list
> Rails-spinoffs@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
>
--
Andrew Tetlaw
htp://tetlaw.id.au
_______________________________________________
Rails-spinoffs mailing list
Rails-spinoffs-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs