• 精通JavaScript第二章——可复用的代码


    我们应该把原型链看做一种委托关系而非类的父子关系,A继承与B,A没有的属性委托给B。原型链就是一种委托机制,允许我们将行为委托给链上更远的一环来处理

    var person = {
      name:"john",
      age:"100",
      job:"teacher",
      getAge:function() {return this.age},
      toString:function() {console.log(this.name + this.age + this.job)},
      extend:function(config) {
        var tmp = Object.create(this);
        console.log(tmp)
        console.log(tmp.age)
      }
    }
    
    person.extend()
    结果
    Object {}
    100
    
    var person = {
      name:"john",
      age:"100",
      job:"teacher",
      getAge:function() {return this.age},
      toString:function() {console.log(this.name + this.age + this.job)},
      extend:function(config) {
        var tmp = Object.create(this);
        for (var key in config)  {
          if (config.hasOwnProperty(key)) {
            tmp[key] = config[key]
          }
        }
        return tmp
      }
    }
    
    person.extend({name:"le",age:"101"})
    
    
    
    
    var bob = Person.extend({
     name:"amy",
     age:"200",
     job:"writer",
     male:"man",
     gs:function() {
    
      console.log(this.name + this.age + this.job + this.male)
     }
    
      
    })
    
    var patty = bob.extend({
      firstname:"patie",
      lastname:"hun",
      gender:'female',
    })
    
    console.log(patty.toString())
    

    如果访问已被覆盖的方法会怎样呢?子对象当然可以覆盖父对象的方法,在任何面向对象系统中都可以这么做。但是在大多数面向对象系统中,被覆盖的方法必须通过类似于super的属性或存储器来访问被父方法,也就是说当覆盖某个方法的时候你可以通过特殊的关键字来调用被覆盖的方法。借下来我们来实现一个super

    var person = {
      name:"john",
      age:"100",
      job:"teacher",
      getAge:function() {return this.age},
      toString:function() {console.log(this.name + this.age + this.job)},
      extend:function(config) {
        var tmp = Object.create(this);
        for (var key in config)  {
          if (config.hasOwnProperty(key)) {
            tmp[key] = config[key]
          }
        }
        return tmp
      }
    }
    
    
    var Teacher = person.extend({
        job:"teacher",
        name:"alice",
        subject:'english literature'
        toString:function() {
            var original = person.toString.call(this);
            return original+""+this.subject+'teacher'
        }
    })
    
    var patty = Teacher.extend({
      name:'dhfisfg',
      age:'sdfsf',
      subject:'chemistry',
      gender:'female',
      job:'ooooo'
    ])
    console.log(patty.toString()
    
  • 相关阅读:
    Hadoop杂记
    hadoop主节点(NameNode)备份策略以及恢复方法
    (转)第12章 Shell脚本编程
    Hadoop添加删除节点
    secondarynamenode异常
    (转)Memcached笔记——(一)安装&常规错误&监控
    浅(kou)谈(hu)杜教筛
    Pollard_Rho 算法
    Miller_Rabin 素数判定算法
    zoj分类(包括poj已做的)
  • 原文地址:https://www.cnblogs.com/Tjinhui/p/7067277.html
Copyright © 2020-2023  润新知