在类外定义变量与将其用作类内的属性

时间:2019-07-07 15:55:25

标签: javascript class

我不确定 ieAlert 类之外的 cookieExists 的定义。 变量 cookieExists 是否在类 ieAlert 之外可以吗? 还是应该将其定义为类定义中的属性?

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

class ieAlert {

  // Method for checking if IE11
  static isIE() {  
    return window.navigator.userAgent.match(/(MSIE|Trident)/);
  }
  // Method for setting a cookie
  static 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 (!ieAlert.isIE() && !cookieExists) {
  window.alert("Your browser is outdated!");
  ieAlert.createCookie('myCookie', 'ie11_cookie', 1);
}

module.exports = ieAlert;

2 个答案:

答案 0 :(得分:2)

the advice I already gave之后,您可以简单地将exports.increment = function () { return { type: "INC" } } 定义为With CreateObject("Scriptlet.TypeLib") '' For Del This = {} WSH.Echo mid(.Guid ,2, 36) WSH.Echo (.Guid) End With 的属性。如果您希望属性访问权限每次都重新评估条件,则将其定义为getter property

cookieExists

答案 1 :(得分:0)

我认为,这可能需要更多有关您要完成的目标的解释。自行运行,此代码将在没有cookieExists作为类属性的情况下执行。

但是,由于您要导出该类,因此我认为问题在于它如何作为模块运行。

当需要此模块并加载和评估其代码时,它将评估并执行条件表达式。但是,由于唯一的导出是class ieAlert,并且条件表达式的评估根本不是该类的一部分,因此评估附加表达式的结果就是所谓的副作用。模块的“ strong>”。有关更多说明,请参见this stackoverflow question

除了定义类ieAlert之外,此模块还可能影响范围。通常,不建议这样做。

也许您可以像这样定义class ieAlert的方法:

static findCookie() {
   return document.cookie.indexOf('ie11_cookie') >= 0;
}

这样,您可以更好地控制何时进行评估。