zoukankan      html  css  js  c++  java
  • JS中对象的特征:继承

    子类沿用父类的属性和方法来达到重用,并且子类可以扩展自己的属性和方法
    2.1继承方法
    2.1.1对象冒充法
    优点:可以继承属性 缺点:不可以继承方法,检测类型可以发现子类不在父类中
    强制继承 js 先定义子类对象,然后再对象中写 this.inherit = 父类对象名 this.inherit(参数一,参数二,参数三...) delete this inherit;
    
    call/apple冒充法
    
    js 先定义子类对象,然后再对象中写 父类对象名.apply(this,[参数1,参数2...]); 父类对象名.call(this,参数1,参数2..)
    2.2原型链
    优点:可以继承方法,检测类型可以发现子类在父类中 缺点:获取不到属性
    子类名.prototype = new 父类对象名();
    2.3混合方式
    结合原型链和对象冒充法,既可以获取到属性,也可以继承方法,检测类型也可以发现子类在父类中
    定义一个子类对象,对象中用对象冒充法继承到父类属性 然后用原型链继承到父类方法
    看原型 子类对象名.prototype(只能找上一级) 子类对象名.proto(可以一直往上找)
    示例:
    //父类动物
    function Animal(name,color,male) {
        this.name = name;
        this.color = color;
        this.male = male;
    }
    Animal.prototype.intro = function () {
        console.log("I am animal");
    }
    //子类猫
    function Cat(name,color,male) {
        Animal.apply(this,["咪咪","黑白色","雄"]);
        //继承父类的属性
    }
    Cat.prototype = new Animal();
        //原型链继承父类的方法
    Cat.prototype.itself = function () {
        console.log("I am cat,怕水,舌头有倒刺");
    }
    //子类自己的方法要写在继承父类方法的后面
    let cat = new Cat();
    console.log(cat.name,cat.color,cat.male);
    cat.itself();
    cat.intro();
    //子类狗
    function Dog(name,color,male) {
        Animal.apply(this,["汪汪","黑白色","雄"]);            
    }
    Dog.prototype = new Animal();
    Dog.prototype.itself = function () {
        console.log("I am dog,不怕水,舌头没倒刺");
    }
    let dog = new Dog();
    console.log(dog.name,dog.color,dog.male);
    dog.itself();
    dog.intro();
    console.log(Dog.prototype);
    console.log(Dog.prototype.prototype);
    console.log(Cat.__proto__);
    console.log(Cat.__proto__.__proto__);
    console.log(Cat.__proto__.__proto__.__proto__);
    
    
    //咪咪 黑白色 雄
      i am cat ,怕水,舌头有倒刺
      i am animal
      汪汪 黑白色 雄
      i am dog, 不怕水,舌头没倒刺
      i am animal
    //看原型
        Animal {
          name: undefined,
          color: undefined,
          male: undefined,
          itself: [Function] }
        undefined
        [Function]//所有函数的__proto__都指向function
        {}//在往上就是空对象
        null//再往上就是null这是最上一级,不能在往上了
  • 相关阅读:
    虚方法的调用是怎么实现的(单继承VS多继承)
    C++ Data Member内存布局
    删除单链表,你会吗?
    最近面试遇到的Windows相关的题目
    C# 文章导航
    移动端开发文章导航
    Vue源码阅读(一) 准备工作
    vue-router源码阅读(一) 内部探究
    Vuex源码阅读(二) store内的getters实现逻辑
    Vuex源码阅读(一) new Vuex.Store()内部探究
  • 原文地址:https://www.cnblogs.com/cj-18/p/9164612.html
Copyright © 2011-2022 走看看