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

  • 相关阅读:
    [No00004E]千万不要“拼命”工作——写在滴滴总裁柳青患癌症之后
    [No00004D]深度思考好文:软件工程师的困境
    [No00004C]软件工程师的创业陷阱:接私活
    [No00004B]Windows 下面为Python3.5安装NoteBook
    [No00004A]为什么你看了很多书,却依然没有洞见
    [No000049]狗日的中年——姜文
    [No000048]程序员的成长过程中,有哪些阶段?
    [No000047]好的架构源于不停地衍变,而非设计
    [No000046]为什么跳槽加薪会比内部调薪要高?
    [No000045]最好的休息,不是睡觉!
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5051766.html
Copyright © 2011-2022 走看看