js深入研究之神奇的匿名函数类生成方式

简介:
<script type="text/javascript">
var Book = (function() {
  
  // 私有静态属性
  var numOfBooks = 0;

  // 私有静态方法
  function checkIsbn(isbn) {
    if(isbn == undefined || typeof isbn != 'string') {
      return false;
    }
    return true;
  }    

  // 返回构造函数
  return function(newIsbn, newTitle, newAuthor) { // implements Publication

    // 私有属性
    var isbn, title, author;

    // 特权方法
    this.getIsbn = function() {
      return isbn;
    };
    this.setIsbn = function(newIsbn) {
      if(!checkIsbn(newIsbn)) throw new Error('Book: Invalid ISBN.');
      isbn = newIsbn;
    };

    this.getTitle = function() {
      return title;
    };
    this.setTitle = function(newTitle) {
      title = newTitle || 'No title specified';
    };

    this.getAuthor = function() {
      return author;
    };
    this.setAuthor = function(newAuthor) {
      author = newAuthor || 'No author specified';
    };

    // 控制对象数目,构造函数
    numOfBooks++; // Keep track of how many Books have been instantiated
                  // with the private static attribute.
    if(numOfBooks > 5) throw new Error('Book: Only 5 instances of Book can be '
        + 'created.');

    this.setIsbn(newIsbn);
    this.setTitle(newTitle);
    this.setAuthor(newAuthor);
  }
})();

// 公有静态方法
Book.convertToTitleCase = function(inputString) {
  alert('convertToTitleCase');
};

// 公有非特权方法
Book.prototype = {
  display: function() {
    alert("isbn:"+this.getIsbn()+" title:"+this.getTitle()+" author:"+this.getAuthor());
  }
};
//var theHobbit = new Book(123, '', 'J. R. R. Tolkein'); // 非字符串抛出异常
var theHobbit = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit.display(); 
//theHobbit.convertToTitleCase(); // Uncaught TypeError: Object #<Object> has no method 'convertToTitleCase'
Book.convertToTitleCase();  // 输出convertToTitleCase

var theHobbit2 = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit2.display(); 

var theHobbit3 = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit3.display(); 

var theHobbit4 = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit4.display(); 

var theHobbit5 = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit5.display(); 

var theHobbit6 = new Book('1990-78sd-1092', '', 'J. R. R. Tolkein'); 
theHobbit6.display(); // Uncaught Error: Book: Only 5 instances of Book can be created. 

</script>
复制代码

这里已经把js出神入化了,佩服到极致,代码清晰简洁,美观,注释恰到好处。


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5051766.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
72 0
|
4天前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
51 3
|
5月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
118 4
|
5月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
129 3
|
7月前
|
存储 算法 JavaScript
基于 Node.js 深度优先搜索算法的上网监管软件研究
在数字化时代,网络环境呈现出高度的复杂性与动态性,上网监管软件在维护网络秩序与安全方面的重要性与日俱增。此类软件依托各类数据结构与算法,实现对网络活动的精准监测与高效管理。本文将深度聚焦于深度优先搜索(DFS)算法,并结合 Node.js 编程语言,深入剖析其在上网监管软件中的应用机制与效能。
97 6
|
9月前
|
JavaScript 前端开发 容器
this、self、window、top 在 JavaScript 中的区别深入研究
在 JavaScript 开发中,`this`、`self`、`window` 和 `top` 是四个常用的概念。`this` 指向当前执行上下文的对象,其值取决于函数调用方式;`self` 在全局作用域中等同于 `window`,常用于 Web Workers;`window` 代表浏览器窗口,是全局变量的容器;`top` 指向最顶层窗口,用于判断是否在框架中。理解这些概念有助于编写健壮的代码。
244 1
this、self、window、top 在 JavaScript 中的区别深入研究
|
Web App开发 JavaScript 前端开发
JavaScript 类(class)
JavaScript 类(class)
98 2
JavaScript 类(class)
|
JavaScript 前端开发
JavaScript基础知识-构造函数(也称为"类")定义
本文介绍了JavaScript中构造函数(也称为“类”)的定义和使用方法。
138 1
JavaScript基础知识-构造函数(也称为"类")定义
|
JavaScript 前端开发 开发者
JavaScript 类继承
JavaScript 类继承
74 1
|
JavaScript 安全
ES6中JS类实现的解读
ES6中JS类实现的解读
86 2