《js精粹》-读书笔记04

133 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

第5章 继承

  • js是基于原型的语言,意味着对象直接从其他对象继承

伪类

  • 通过构造器函数产生对象
    this.prototype = { constructor: this };
  • new 运算符方法
    Function.method('new', function(){
      // 创建一个新对象,它继承自构造器函数的原型对象
      var that = Object.create(this.prototype);
      // 调用构造器函数, 绑定 - this - 到新对象上
      var other = this.apply(that, arguments);
      // 如果它的返回值不是一个对象,就返回该新对象
      returntypeof other === 'object' && other)|| that;
    })
  • 定义一个构造器并扩充它的原型
    var Mammal = function(name){
       this.name = name;
    }
    Mammal.prototype.get_name = function(){
       return this.name;
    }
    Mammal.prototype.says = function(){
        return this.saying || '';
    }
  • 构造一个实例
    var myMammal = new Mammal('Herb the Mammal');
    var name = myMammal.get_name();  // 'Herb the Mammal'
  • 构造另一个伪类来继承 Mammal,通过定义它的constructor函数并替换它的prototype为一个Mammal的实例来实现
    var Cat = function(name){
        this.name = name;
        this.saying = 'meow';
    }
    // 替换 Cat.prototype 为一个新的 Mammal 实例
    Cat.prototype = new Mammal();
    // 扩充新原型对象,增加 purr 和 get_name方法
    Cat.prototype.purr = function(n){
        var i , s = '';
        for(i = 0;i < n; i+=1){
            if(s){
                s += '-';
            }
            s += 'r';
        }
        return s;
    }
    Cat.prototype.get_name = function(){
        return this.says() + ' ' + this.name + ' ' + this.says();
    }
    
    var myCat = new Cat('Henrietta');
    var says = myCat.says(); // 'meow';
    var purr = myCat.purr(5); // 'r-r-r-r-r'
    var name = myCat.get_name(); // 'meow Henrietta meow'

对象说明符

  • 将要构建的对象规格说明
    var myObject = maker(f,l,m,c,s)
    
    var mybject = maker({
        first: f,
        middle: m,
        last: l,
        state: s,
        city: c
    })

原型

函数化

  • 构造一个生成对象的函数
    1. 创建一个新对象
    2. 有选择的定义私有实例变量和方法
    3. 给这个新对象扩充方法
    4. 返回新对象

部件

  • 可从部件中把对象组装出来,可构造一个给任何对象添加简单事件处理特性的函数,它会给对象添加on方法、fire方法和私有的事件注册表对象