zoukankan      html  css  js  c++  java
  • js继承的几种方式

    原型链继承:无法传参

    function Fun1(){
    
      this.property = true;
    
    }
    
    Fun1.prototype.getValue = function(){
    
      return this . property;
    
    }
    
    Function Fun2(){
    
      this.sub = false;
    
    }
    
    Fun2.prototype = new Fun1();
    
    Fun2.prototype .sayValue = function(){
    
      return this.sub;
    
    }
    
    Var instance = new Fun2();
    
    Console.log(instance.getValue());
    
    // 创建Fun1的实例,并讲该实例赋给Fun2.prototype实现的。本质是重写原型对象,代之以一个新类型的实例。原来存在于Fun1的实例中的属性和方法,现在也存在于Fun2.prototype中了。

    构造函数call() apply()  解决传参的问题,父类原型的属性和方法不能继承,实例不是父类的实例

    function Fun1(){
    
      this.color=[‘red’ , ’blue’];
    
    }
    
    function Fun2(){
    
      fun1.call(this);
    
    }
    
    var instance1 = new Fun2();
    
    Instance1.colors.push(“black”);
    
    Console.log(instance1.colors); //red blue black
    
     
    
    Var instance2 = new Fun2();
    
    Console.log(instance2.colors); // red blue
    
     
    
    传参:
    
    Function Fun1(name){
    
      this.name = name;
    
    }
    
    Function Fun2(age){
    
    Fun2.call(this, “John”);
    
      This.age = 23;
    
    }
    
    Var instance = new Fun2();
    
    Console.log(instance.name)// John
    
    Console.log(instance.age)//23

    组合继承:组合原型链和构造函数,原型链实现对原型属性和方法的继承,构造函数来实现对实例属性的继承。

    Function Fun1(name){
    
    This.name = name;
    
    This.color = [“red” , “blue”];
    
    }
    
    Fun1.prototype.sayName = function(){
    
    alert(this.name);
    
    }
    
    Function Fun2(name , age){
    
    Fun1.call(this , name);
    
    This.age = age;
    
    }
    
    Fun2.prototype = new Fun1();
    
    Fun2.prototype.sayAge = function(){
    
    Console.log(this.age);
    
    }
    
    Var instance1= new Fun2(“John”, 29);
    
    Instance1.colors.push(“black”);
    
    Console.log(instance1.colors); //red blue black
    
    Instance1.sayName (); //John
    
    Instance1.sayAge(); // 29
    
     
    
    Var instance2 = new Fun2();
    
    Console.log(Instance2.color); //red blue
    
    Instance.sayName();//John
    
    Instance.sayAge(); //29

    原型式继承:借助原型可以基于已有的对象创建新对象,同时还不必须因此创建自定义的类型。

     

    //新增Object.create()方法规范了原型式继承
    //可以传递两个参数,第一个是用作新对象原型的对象,第二个(可选)为新对象定义额外属性的对象
    
    //传递一个参数时,等同于object()
    var person = {
      name:"EvanChen",
      friends:["Shelby","Court","Van"];
    };
     var anotherPerson = Object.create(person);
    anotherPerson.name = "Greg";
    anotherPerson.friends.push("Rob");
     
    var yetAnotherPerson = Object.create(person);
    yetAnotherPerson.name = "Linda";
    yetAnotherPerson.friends.push("Barbie");
     
    console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"
    思想:
    
    function object(o) {
    
      function F(){ }
    
      F.prototype = o;
    
      return new F();
    
    }
    
    var person = {
        name:"EvanChen",
        friends:["Shelby","Court","Van"];
    };
    var anotherPerson = object(person);
    anotherPerson.name = "Greg";
    anotherPerson.friends.push("Rob");
    
    var yetAnotherPerson = object(person);
    yetAnotherPerson.name = "Linda";
    yetAnotherPerson.friends.push("Barbie");
    
    console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"
    //必须有一个对象作为另一个对象的基础,如果有这么一个对象的话,可以传递给object()函数,然后该函数就会返回一个新的对象
  • 相关阅读:
    吉他 摄影
    前端思考独处时间自我成长
    约束力
    js算法
    旅行计划
    生产者消费者问题
    Lock锁
    线程和进程
    什么是JUC
    GC日志分析和垃圾回收器的新展望
  • 原文地址:https://www.cnblogs.com/Auyuer/p/8580197.html
Copyright © 2011-2022 走看看