zoukankan      html  css  js  c++  java
  • 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出神入化了,佩服到极致,代码清晰简洁,美观,注释恰到好处。

  • 相关阅读:
    Windows UI自动化测试的XPATH实现
    Laravel修炼:服务容器绑定与解析
    swoole之memoryGlobal内存池分析
    Go语言的前景分析
    thinkphp5 编辑时 唯一验证 解决办法
    GIT配置多用户
    PHP 数组
    PHP 变量作用域
    PHP 使用 Swoole
    欢迎使用CSDN-markdown编辑器
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5051766.html
Copyright © 2011-2022 走看看