Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.02.2010, 23:50
Аватар для Ars_Art
Новичок на форуме
Отправить личное сообщение для Ars_Art Посмотреть профиль Найти все сообщения от Ars_Art
 
Регистрация: 20.06.2009
Сообщений: 6

JavaScript: ООП
var browser = {
     msie: false,
     mozilla: true,
     name: function() {
          for ( prop in browser )
               if ( browser[prop]===true )
                    return prop;
          }
};

console.log( browser.name ); //<---- Не меняя метода вызова - как элегантно решить задачу?
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2010, 00:32
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

console.log( browser.name() );
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2010, 00:34
Аватар для Ars_Art
Новичок на форуме
Отправить личное сообщение для Ars_Art Посмотреть профиль Найти все сообщения от Ars_Art
 
Регистрация: 20.06.2009
Сообщений: 6

Сообщение от Мараторий Посмотреть сообщение
console.log( browser.name() );
Да, так несомненно работает, но в условии как раз-таки не трогать метод вызова.
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2010, 00:39
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Ну вы понимаете, что геттеры в js есть, но они не кросс-браузерны.
Если вам так приспичило, то надо предварительно записать нужную информацию в browser.name.
(function() {
  for (var prop in browser ) {
    if ( browser[prop]===true ) {
      browser.name = prop;
      break;
    }
  }
})();
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2010, 00:48
Аватар для Ars_Art
Новичок на форуме
Отправить личное сообщение для Ars_Art Посмотреть профиль Найти все сообщения от Ars_Art
 
Регистрация: 20.06.2009
Сообщений: 6

var browser = {
  msie: false,
  mozilla: true,
  name: (function() {
    for (var prop in browser ) {
      if ( browser[prop]===true ) {
        browser.name = prop;
        break;
      }
    }
  })()
};

console.log( browser.name );


Я правильно понял? Если да, то "undefined"
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2010, 00:52
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Сообщение от Ars_Art Посмотреть сообщение
var browser = {
  msie: false,
  mozilla: true,
  name: (function() {
    for (var prop in browser ) {
      if ( browser[prop]===true ) {
        browser.name = prop;
        break;
      }
    }
  })()
};

console.log( browser.name );


Я правильно понял? Если да, то "undefined"
Если хотите так, то не совсем:
var browser = {
  msie: false,
  mozilla: true,
  name: (function() {
    for (var prop in browser )
      if ( browser[prop]===true )
        return prop;
  })()
};

console.log( browser.name );
Ответить с цитированием
  #7 (permalink)  
Старый 05.02.2010, 00:57
Аватар для Ars_Art
Новичок на форуме
Отправить личное сообщение для Ars_Art Посмотреть профиль Найти все сообщения от Ars_Art
 
Регистрация: 20.06.2009
Сообщений: 6

В любом случае - "undefined".
Пробовал изначально так уже исхитриться.
Ответить с цитированием
  #8 (permalink)  
Старый 05.02.2010, 00:59
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

Ну потому что в момент запуска функции объект browser еще не определен. Функцию нужно запускать после его создания.
Ответить с цитированием
  #9 (permalink)  
Старый 05.02.2010, 01:00
Аватар для Мараторий
Кандидат Javascript-наук
Отправить личное сообщение для Мараторий Посмотреть профиль Найти все сообщения от Мараторий
 
Регистрация: 22.01.2010
Сообщений: 114

var browser = {
  msie: false,
  mozilla: true
};

browser.name = (function() {
    for (var prop in browser )
      if ( browser[prop]===true )
        return prop;
  })()

console.log( browser.name );
Ответить с цитированием
  #10 (permalink)  
Старый 05.02.2010, 01:08
Аватар для Ars_Art
Новичок на форуме
Отправить личное сообщение для Ars_Art Посмотреть профиль Найти все сообщения от Ars_Art
 
Регистрация: 20.06.2009
Сообщений: 6

Понял. И это и будет самым изящным решением?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Собрался силами, собираюсь освоить Javascript walker Общие вопросы Javascript 14 20.03.2012 16:17
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Программист на JavaScript (удалённо) Vadym Работа 1 28.01.2009 13:57
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43