Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript: ООП (https://javascript.ru/forum/misc/7509-javascript-oop.html)

Ars_Art 04.02.2010 23:50

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

console.log( browser.name ); //<---- Не меняя метода вызова - как элегантно решить задачу?

Мараторий 05.02.2010 00:32

console.log( browser.name() );

Ars_Art 05.02.2010 00:34

Цитата:

Сообщение от Мараторий (Сообщение 43626)
console.log( browser.name() );

Да, так несомненно работает, но в условии как раз-таки не трогать метод вызова.

Мараторий 05.02.2010 00:39

Ну вы понимаете, что геттеры в js есть, но они не кросс-браузерны.
Если вам так приспичило, то надо предварительно записать нужную информацию в browser.name.
(function() {
  for (var prop in browser ) {
    if ( browser[prop]===true ) {
      browser.name = prop;
      break;
    }
  }
})();

Ars_Art 05.02.2010 00:48

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"

Мараторий 05.02.2010 00:52

Цитата:

Сообщение от Ars_Art (Сообщение 43632)
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 );

Ars_Art 05.02.2010 00:57

В любом случае - "undefined".
Пробовал изначально так уже исхитриться.

Мараторий 05.02.2010 00:59

Ну потому что в момент запуска функции объект browser еще не определен. Функцию нужно запускать после его создания.

Мараторий 05.02.2010 01:00

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

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

console.log( browser.name );

Ars_Art 05.02.2010 01:08

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


Часовой пояс GMT +3, время: 16:17.