Comments 21
Только по постскриптуму догадался что это и на каком языке написано.
Проверяйте во всех браузерах, тогда поговорим =)
Проверяйте во всех браузерах, тогда поговорим =)
+1
Конгениально!!! Нобелевскую премию товарищу!!!
Это же сверхидея, заменить конструктор объекта самим объектом в процессе.
Делаем так:
Это же сверхидея, заменить конструктор объекта самим объектом в процессе.
Делаем так:
-1
Извиняюсь:
x = new a(); // a.constructor = a()
var b = new a(); // Error: a is not a constructor
И все, нет никакого синглтона
x = new a(); // a.constructor = a()
var b = new a(); // Error: a is not a constructor
И все, нет никакого синглтона
0
Совершенно не понял смысла написанного.
+1
Смысл в том, что вы не реализовали синглтон, а просто заменили конструктор экземпляром. То есть второй раз вызывать вы должны уже экземпляр, а откуда вы знаете, экземпляр у вас уже в данном месте программы или только конструктор??? Значит надо будет каждый раз проверять свойство a.constructor на существование. А смысл паттерна синглтон как раз в единообразии вызова в любом месте программы.
0
Смысл в том, что единожды создав объект, и удалив его конструктор, нельзя создать еще один экземпляр.
А если менять код, то это будет другой код, а не криво просто работающий.
А если менять код, то это будет другой код, а не криво просто работающий.
0
По-нормальному синглтон в яваскрипте реализуется так:
var a = {
_property:null,
property:function(value){
if (value) {
this._property = value;
return this._property;
} else {
return this._property;
}
}
};
a.property('sdds');
var b = new a(); // Error: a is not a constructor
var a = {
_property:null,
property:function(value){
if (value) {
this._property = value;
return this._property;
} else {
return this._property;
}
}
};
a.property('sdds');
var b = new a(); // Error: a is not a constructor
0
После того, как наткнулся на WTF при попытке расширить приложение из-за Singleton'а, считаю его глобальной переменной и всячески его избегаю.
0
var a=new function(){...}
0
А такой вариант
function C(p)
{
if(!(this instanceof C))
return new C(p);
if(!C.Singleton)
{
C.Singleton = this;
/* TODO */
this.p = p;
}
else return C.Singleton;
};
var x = new C(1);
var y = C(2);
var z = new C(3);
alert("x == z : " + (x == z));
alert("x === z : " + (x === z));
alert("x:"+x.p+", y:"+y.p+", z:"+z.p);
0
Ну или покороче
function C(p)
{
if(!(this instanceof C)) return new C(p);
else if(C.Singleton) return C.Singleton;
C.Singleton = this;
/* TODO */
this.p = p;
};
var x = new C(1);
var y = C(2);
var z = new C(3);
alert("x == z : " + (x == z));
alert("x === z : " + (x === z));
alert("x:"+x.p+", y:"+y.p+", z:"+z.p);
0
Sign up to leave a comment.
Проба пера или мысли вслух