Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2008, 11:58
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Одиночки. В чем разница?
Одиночки.
Есть ли разница и если есть, то в чем она заключается?
Раз:
var NewObject = {};
(function() {
  var privateStr = 'Я приватная';
  NewObject = {
    methodX: function() {
      alert(privateStr);
    }
  }
})
NewObject.methodX();

Два:
var NewObject = new function() {
  var privateStr = 'Я приватная';
  this.methodX = function() {
    alert(privateStr);
  }
}
NewObject.methodX();

Последний раз редактировалось Snipe, 02.06.2008 в 12:00.
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2008, 12:18
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

второй код короче.
но оба бестолковы.. не стоит использовать замыкания для сокрытия состояния объекта. от этого больше неудобств, чем пользы.
__________________
.ня
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2008, 12:23
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от tenshi
второй код короче.
но оба бестолковы.. не стоит использовать замыкания для сокрытия состояния объекта. от этого больше неудобств, чем пользы.
А как тогда прятать не нужные мне в глобальной области видимости элементы?
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2008, 13:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Snipe
А как тогда прятать не нужные мне в глобальной области видимости элементы?
Они и не будут в глобальной области, они будут свойствами соответствующего объекта.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2008, 13:24
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от Kolyaj Посмотреть сообщение
Они и не будут в глобальной области, они будут свойствами соответствующего объекта.
Это понятно, но я же их не использую вне объекта. Т.е. в принципе мне не надо NewObject.privateStr, даже наоборот, хочу сделать privateStr недоступным.
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2008, 13:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Snipe
хочу сделать privateStr недоступным.
А в результате страдает читабельность кода, скорость скрипта, количество используемой памяти. Оно надо?
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2008, 14:00
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от Kolyaj Посмотреть сообщение
А в результате страдает читабельность кода, скорость скрипта, количество используемой памяти. Оно надо?
Конечно же необязательно.
Просто захотелось.

Кстати, а где тогда можно уточнить про влияние таких вот изворотов на скорость скрипта?
Ответить с цитированием
  #8 (permalink)  
Старый 02.06.2008, 15:48
Профессор
Отправить личное сообщение для hogart Посмотреть профиль Найти все сообщения от hogart
 
Регистрация: 18.04.2008
Сообщений: 152

Snipe, экспериментируйте

Но мысль на самом деле правильная. В большом проекте лучше скрывать ненужное. Инкапсуляция в ООП для этого и придумана.
Ответить с цитированием
  #9 (permalink)  
Старый 02.06.2008, 16:48
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Snipe, посмотрите разницу для обоих случаев в:

alert(NewObject.constructor); // => NewObject.[[prototype]].constructor


Поэтому, если говорить об инициализирующем скопе, то первый вариант подойдет больше, т.к. во втором случае получается инстанс анонимной функции.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #10 (permalink)  
Старый 02.06.2008, 17:47
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

Замыкания внутри конструкторов создают скорее не приватные свойства объектов, а приватные статические переменные "классов".И в этой ипостаси, они очень удобны. А городить всё это ради одного свойства, скорее всего, не стоит
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22
кто в чём пишет??? uncle Общие вопросы Javascript 12 22.04.2008 20:20