Ну, во-первых, я хотел бы отметить, пожалуйста, больше не пользуйтесь пользовательским агентом, сниффингом, в наши дни это вызывает неодобрение.
См. Эту ссылку для получения дополнительной информации, почему UA нюхает плохо
Ответ на ваш вопрос:
Это будет работать, если вы объявите метод getUserAgent перед методом isIE.
var Browsertest = {
getUserAgent: function() {
return navigator.userAgent;
},
isIE: /MSIE (\d+\.\d+)/.test(this.getUserAgent())
};
Это потому что:
/MSIE (\d+\.\d+)/.test(this.getUserAgent())
Сразу же выполняется при разборе, потому что это выражение, а не объявление функции. Поэтому он не знает о getUserAgent, потому что этот метод просто еще не проанализирован.
Но метод getUserAgent является избыточным, поэтому вы также можете написать его так:
var Browsertest = {
isIE: /MSIE (\d+\.\d+)/.test(navigator.userAgent)
};