• JS 中的继承


    原生JS(ES5)中的继承

    对象冒充继承: 没法继承原型链上面的属性和方法
    function Person(name, age) {
        this.name = name;
        this.age = age;
        this.run = function () {
            console.log(`${this.name} is ${this.age}岁`)
        }
    }
    Person.prototype.sex = '男'
    Person.prototype.work = function () {
        console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
    }
    
    function Man(name, age) {
        Person.call(this, name, age) //对象冒充实现继承
    }
    
    var man = new Man('sally', 18)
    man.run()
    man.work()
    
    /**
      man.work is not a function
    */
    

      

    原型链继承:可以继承构造函数里面以及原型链上面的属性和方法,实例化子类的时候没法给父类传参

    function Person(name, age) {
        this.name = name;
        this.age = age;
        this.run = function () {
            console.log(`${this.name} is ${this.age}岁`)
        }
    }
    Person.prototype.sex = '男'
    Person.prototype.work = function () {
        console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
    }
    
    
    //原型链继承
    function Man(name, age) {}
      
    Man.prototype = new Person() 
    
    var man = new Man('sally', 18)
    man.run()
    man.work()
    
    /**
      undefined is undefined岁
      undefined is 男 and undefined岁
    */
    

      

    采用原型链继承和对象冒充继承相结合的方式继承:

    function Person(name, age) {
        this.name = name;
        this.age = age;
        this.run = function () {
            console.log(`${this.name} is ${this.age}岁`)
        }
    }
    Person.prototype.sex = '男'
    Person.prototype.work = function () {
        console.log(`${this.name} is ${this.sex} and ${this.age}岁`)
    }
    
    //对象冒充实现继承
    function Man(name, age) {
        Person.call(this, name, age) 
    }
    //原型链继承
    Man.prototype = new Person() 
    
    var man = new Man('sally', 18)
    man.run()
    man.work()
    
    
    /**
     * sally is 18岁
     * sally is 男 and 18岁
     */
    

      

    ES6 中的继承

    通过 extends 关键字:

    class Person {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        getInfo() {
            console.log(`姓名:${this.name} 年龄:${this.age}`);
        }
        run() {
            console.log('run')
        }
    }
    class Man extends Person {  //继承了Person  extends  super(name,age);
        constructor(name, age, sex) {
            super(name, age);   //实例化子类的时候把子类的数据传给父类
            this.sex = sex;
        }
        print() {
            console.log(this.sex);
        }
    }
    var man = new Man('jack', '30', '男');
    man.getInfo();
    
    /**
     * 姓名:jack 年龄:30
     */
    

      

  • 相关阅读:
    Go语言程序调试
    IDA FLIRT使用
    通过PEB寻找函数地址
    使用IWebBrowser2操控浏览器页面测试(IE)
    虚拟机检测手段
    初步了解PE分析
    CG-CTF simple-machine
    调试器原理初步学习
    简单shellcode编写
    使用ReportViewer的远程模式
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13172520.html
Copyright © 2020-2023  润新知