2009-10-23 2 views
0

Приносим извинения, что переместил его отсюда было какое-то замешательство и спасибо Серый для ответа на это, чтобы осознать ошибку . Тема была перенесена в Javascript: Behavior of {} для дальнейшего обсуждения.Шаблон Singleton с {}?

Singleton Pattern с '{}'. Вот как это:

var A = { 
B : 0 
}; 

// A is an object? 
document.write("A is an " + typeof A); 

Позволяет попытаться клонировать объект A

var objectOfA = new Object(A); 
objectOfA.B = 1; 

//Such operation is not allowed! 
//var objectOfA = new A(); 

var referenceOfA = A; 
referenceOfA.B = -1; 

document.write("A.B: " + A.B); 
document.write("<br/>"); 

выше referenceOfA.B содержит ссылку на объект A, поэтому изменение значения referenceOfA.B, безусловно, отражает в A.B.

document.write("referenceOfA.B: " + referenceOfA.B); 
document.write("<br/>"); 

Если успешно клонированы затем objectOfA должен держать ценность 1

document.write("objectOfA.B: " + objectOfA.B); 
document.write("<br/>"); 

Ниже приведены результаты:

А объект

АВ: -1

referenceOfA.B: -1

objectOfA.B: -1

Upto здесь все ясно, но объект должен принять instanceof на него. Но здесь, если вы попытаетесь использовать instanceof с A, у вас есть исключение.

Почему?

+0

понял, что я совершенно неправильно понял. – karim79

+0

Какова точка «singleton pattern» на языке с глобальными переменными? Я прошу по-настоящему, почему бы просто не сказать «var B = 0»? – Victor

+0

Глобальные переменные можно контролировать с помощью замыканий. Очень мощная функция. Вот отличная статья о концепции закрытия: http://www.jibbering.com/faq/faq_notes/closures.html –

ответ

1

Я не получаю исключение:

alert(A instanceof Object); // true 

Испытано в Chrome, IE8 и Firefox.

+0

благодарит Грея за помощь ... делал что-то не так. –

+0

Я был tyring 'referenceOfA instanceof A', где было исключено исключение. Однако 'referenceOfA instanceof Object' возвращает true. –

+0

спасибо o.k.w. Серый понял меня это. –

Смежные вопросы