• 继承


    继承是类和类之间的关系
    继承可以使得子类别具有父类别的各种属性和方法
    原型链继承
    a.valueOf() 面向对象叫成员属性,js叫原型链继承
    Object和Array两个类之间没有任何关系
    但是Object.prototype和Array.prototype有一个重要的关系,所有的对象都是从new Object()构造出来的,Array.prototype也是new Object()构造出来的
    Array.prototype.proto===Object.prototype
    js 子类函数 Array 父类函数 Object
    继承:子类构造出来的对象直接拥有父类的属性,他的实质就是两次的原型搜索

    1
    2
    3
    a=new Array() 
    a.push() push是实例属性 他的类是Array
    a.valueOf()继承自Object

    在原型链上一次查找不叫继承,两次才叫继承

    类就是能产生对象的东西

    只有构造函数才有prototype属性的,prototype属性只有一个功能,存放共有属性的地址
    继承的两种写法

    1.ES 5 写法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function Human(name){  //function Human(){}就是类
    this.name = name
    }
    Human.prototype.run = function(){
    console.log("我叫"+this.name+",我在跑")
    return undefined
    }
    function Man(name){
    Human.call(this, name) //Man继承Human
    this.gender = '男'
    }

    Man.prototype.__proto__=Human.prototype //IE不支持

    var f = function(){}
    f.prototype = Human.prototype //只要Human的prototype
    大专栏  继承s="line"> Man.prototype = new f() //IE支持,f就是去掉‘this.name=name’的Human

    Man.prototype.fight = function(){
    console.log('糊你熊脸')
    }

    IE不能操作prototype,但是new可以操作prototype

    var obj = new Fn()
    new会做五个事情

    1. 产生一个空对象
    2. this=空对象
    3. this.proto=Fn.prototype //this===obj.prototype
    4. 执行Fn.call(this,x,y,….)
    5. return 第四步的结果

    2.ES 6 写法 MDN链接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Human{
    constructor(name){
    this.name = name //自身属性
    }
    run(){
    console.log("我叫"+this.name+",我在跑")
    return undefined
    }
    }
    class Man extends Human{ //Man extends Human===Man.prototype.__proto__=Human.prototype
    constructor(name){
    super(name) //===Human.call(this, name)
    this.gender = '男'
    }
    get s(){
    return '人类' //生成非函数的属性 s:'人类'
    }
    fight(){
    console.log('糊你熊脸')
    }
    }

    两个方法的优劣

    1. ES5的比较繁琐,但是容易理解
    2. ES6不容易理解,不能在prototype上直接生成非函数的属性
  • 相关阅读:
    php高效率写法
    php经典bug
    cideogniter部署到阿里云服务器出现session加载错误
    linux gcc编译protocol
    linux权限问题
    http协议详解
    哈希表
    c语言函数
    socket相关函数
    构建之法阅读笔记05
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12268034.html
Copyright © 2020-2023  润新知