• js深入研究之无法理解的js类代码,extend扩展


    <script type="text/javascript">
    function Person(name) {
      this.name = name;
    }
    
    Person.prototype.getName = function() {
      return this.name;
    }
    
    function Author(name, books) {
      Person.call(this, name); // 定义:调用一个对象的一个方法,以另一个对象替换当前对象。
      this.books = books; // Add an attribute to Author.
    }
    
    Author.prototype = new Person(); // 设置原型链
    Author.prototype.constructor = Author; // 设置构造属性
    Author.prototype.getBooks = function() { // 添加方法
      return this.books;
    };
    
    var author = [];
    author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
    author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
    
    alert(author[0].getName()); //输出 Dustin Diaz
    alert(author[0].getBooks()); //输出 JavaScript Design Patterns
    alert(author[1].getName()); //输出 Ross Harmes
    alert(author[1].getBooks()); //输出 JavaScript Design Patterns
    </script>

    功力不够,无法理解

    进一步升级提取

    <script type="text/javascript">
    /* 扩展函数 */
    function extend(subClass, superClass) {
      var F = function() {};
      F.prototype = superClass.prototype; // F已成superClass父类
      subClass.prototype = new F(); //子类继承父类的原子
      subClass.prototype.constructor = subClass;
    }
    
    
    /* Person类 */
    
    function Person(name) {
      this.name = name;
    }
    
    Person.prototype.getName = function() {
      return this.name;
    }
    
    /* Author类 */
    
    function Author(name, books) {
      Person.call(this, name);
      this.books = books;
    }
    extend(Author, Person);
    
    Author.prototype.getBooks = function() {
      return this.books;
    };
    
    
    var author = []; //定义数组
    author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
    author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
    
    alert(author[0].getName()); //输出 Dustin Diaz
    alert(author[0].getBooks()); //输出 JavaScript Design Patterns
    alert(author[1].getName()); //输出 Ross Harmes
    alert(author[1].getBooks()); //输出 JavaScript Design Patterns
    </script>

     进一步改进,太牛逼了,作者

    <script type="text/javascript">
    /* 扩展函数 */
    function extend(subClass, superClass) {
      var F = function() {};
      F.prototype = superClass.prototype;
      subClass.prototype = new F();
      subClass.prototype.constructor = subClass;
    
      subClass.superclass = superClass.prototype;
      if(superClass.prototype.constructor == Object.prototype.constructor) {
        superClass.prototype.constructor = superClass;
      }
    }
    
    
    /* Person类 */
    
    function Person(name) {
      this.name = name;
    }
    
    Person.prototype.getName = function() {
      return this.name;
    }
    
    /* Author类 */
    
    function Author(name, books) {
      Author.superclass.constructor.call(this, name);
      this.books = books;
    }
    extend(Author, Person);
    
    Author.prototype.getBooks = function() {
      return this.books;
    };
    
    Author.prototype.getName = function() {
      var name = Author.superclass.getName.call(this);
      return name + ', Author of ' + this.getBooks().join(', ');
    };
    
    var author = []; //定义数组
    author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
    author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
    
    alert(author[0].getName()); //输出 Dustin Diaz , Author of JavaScript Design Patterns
    alert(author[0].getBooks()); //输出 JavaScript Design Patterns
    alert(author[1].getName()); //输出 Ross Harmes , Author of JavaScript Design Patterns
    alert(author[1].getBooks()); //输出 JavaScript Design Patterns
    </script>
  • 相关阅读:
    linux常用的命令
    针对无线信道衰落特性分析3G,4G,5G的关键技术异同点
    re-id 资料集
    kissme
    数据集
    matlab print,disp,fprint,fscan
    PCA样本数量少于矩阵维数
    pca降维详细过程
    TOJ 1856 Is It A Tree?
    POJ 2570 Fiber Network
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5051835.html
Copyright © 2020-2023  润新知