Преобразование функций в класс - PullRequest
0 голосов
/ 05 июля 2019

Следующий код показывает предупреждение, если пользователь использует IE11 и устанавливает cookie, срок действия которого истекает через 24 часа:

var cookieExists = document.cookie.indexOf('ie11_cookie') >= 0;

// Function for checking if IE11 or bellow
function isIE() {  
  return window.navigator.userAgent.match(/(MSIE|Trident)/);
}

// Function for setting a cookie
function createCookie(name, value, days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

// If the user is using IE11 and no cookie exist, show the alert and set a cookie
if (isIE() && !cookieExists) {
  window.alert("Your browser is outdated!");
  // Setting a cookie with an expiry date of 1 day
  createCookie('myCookie', 'ie11_cookie', 1);
}

Скрипт работает, но сейчас я пытаюсь преобразовать его в класс. Я пробовал это:

var cookieExists = document.cookie.indexOf('ie11_cookie') >= 0;

class ieAlert {
  // Method for checking if IE11 or bellow
  isIE() {  
    return window.navigator.userAgent.match(/(MSIE|Trident)/);
  }
  // Method for setting a cookie
  createCookie(name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  }
}
// If the user is using IE11 and no cookie exist, show the alert and set a cookie
if (ieAlert.isIE() && !cookieExists) {
  window.alert("Your browser is outdated!");
  // Setting a cookie with an expiry date on 1 day
  createCookie('myCookie', 'ie11_cookie', 1);
}

module.exports = ieAlert;

Но если я запускаю код, я получаю следующую ошибку в консоли:

Uncaught TypeError: ieAlert.isIE не является функцией

Я также не хочу использовать синтаксис ES6, так как скрипт должен работать в IE11, а я не использую Babel.

Что я делаю не так? Какое будет правильное решение?

1 Ответ

1 голос
/ 05 июля 2019

Если вы не хотите вызывать функцию для экземпляра класса, а для самого класса, вам следует использовать ключевое слово static, чтобы определить функцию isIE как статическую.

var cookieExists = document.cookie.indexOf('ie11_cookie') >= 0;
class ieAlert {
  static isIE() {  
    return window.navigator.userAgent.match(/(MSIE|Trident)/);
  }
  // …
}
// …
if (ieAlert.isIE() && !cookieExists) {
  // …
}
...