难以理解这个jquery函数

时间:2015-09-06 16:35:39

标签: jquery

var Pages = function() {
 this.VERSION = "1.0.0";
 this.pageScrollElement = 'html, body';
 this.$body = $('body');
 this.setUserOS();
 this.setUserAgent();
}

Pages.prototype.setUserOS = function() {
  var OSName = "";
  if (navigator.appVersion.indexOf("Win") != -1) OSName = "windows";
  if (navigator.appVersion.indexOf("Mac") != -1) OSName = "mac";
  if (navigator.appVersion.indexOf("X11") != -1) OSName = "unix";
  if (navigator.appVersion.indexOf("Linux") != -1) OSName = "linux";
  this.$body.addClass(OSName);
}
Pages.prototype.setUserAgent = function() {
  if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
      this.$body.addClass('mobile');
  } else {
      this.$body.addClass('desktop');
      if (navigator.userAgent.match(/MSIE 9.0/)) {
          this.$body.addClass('ie9');
      }
  }
}

Pages.prototype.isVisibleXs = function() {
  (!$('#pg-visible-xs').length) && this.$body.append('<div id="pg-visible-xs" class="visible-xs" />');
  return $('#pg-visible-xs').is(':visible');
}

Pages.prototype.isVisibleSm = function() {
  (!$('#pg-visible-sm').length) && this.$body.append('<div id="pg-visible-sm" class="visible-sm" />');
  return $('#pg-visible-sm').is(':visible');
}

Pages.prototype.isVisibleMd = function() {
  (!$('#pg-visible-md').length) && this.$body.append('<div id="pg-visible-md" class="visible-md" />');
  return $('#pg-visible-md').is(':visible');
}

Pages.prototype.isVisibleLg = function() {
  (!$('#pg-visible-lg').length) && this.$body.append('<div id="pg-visible-lg" class="visible-lg" />');
  return $('#pg-visible-lg').is(':visible');
}

Pages.prototype.getUserAgent = function() {
  return $('body').hasClass('mobile') ? "mobile" : "desktop";
}
  1. 为什么要使用原型? 我可能已经把原型的概念弄错了,但我们这里只有一个对象。
  2. 为什么这样。$ body = $(&#39; body&#39;)被使用? 为什么不继续使用$(&#39; body&#39;)?
  3. isVisibleXX函数到底在做什么?

1 个答案:

答案 0 :(得分:0)

  1. 如果您正在进行OOP,您希望将使用信息的代码放在该类中的类中。这是一个设计原则,因此它不是严格意义上的,但它可能会帮助您编写好的和可读的代码。

  2. 轻微的性能提升,因为您每次使用时都不必找到身体节点。

  3. isVisibleXs以奇特的方式编写,为您提供简短的代码,但很难阅读。你可以改写它:

    Pages.prototype.isVisibleXs = function() {
        if($('#pg-visible-xs').length > 0) {
            this.$body.append('<div id="pg-visible-xs" class="visible-xs" />');
        }
        return $('#pg-visible-xs').is(':visible');
    }
    

    或者,用简单的英语:如果还没有ID,请在身体上附加ID为pg-visible-xs的div。返回它是否可见。