美文网首页
JS类的继承

JS类的继承

作者: 麻辣小面瘫 | 来源:发表于2018-01-14 21:49 被阅读0次

1.类式继承

  function Person(name,age){
    this.name = name;
    this.age = age ;
    this.instances = ['1','2','3']
  }
  Person.prototype.getName = function(){}

  function Man(){}
  Man.prototype = new Person('jack',25);  //继承父类
  Man.prototype.getAge = function(){};
  
  var man = new Man();
  console.log(man instanceof Man); //true
  console.log(man instanceof Person); //true
  console.log(Man  instanceof Person); //false 这里并不是实例关系;是Man.prototype继承了Person
  console.log(Man.prototype instanceof Person); //true
  问题: 如果父类中的公共属性是引用类型,则会被所以实例共享,且被修改后同时做出变动;
  var man1 = new Man();
  console.log(man.instances );  // ['1','2','3']
  console.log(man1 .instances );   // ['1','2','3']
  man1.instances.push('4');
  console.log(man.instances );   // ['1','2','3','4']
  1. 构造函数继承
  function Person(age){
    this.age = age ;
    this.instances = ['1','2','3']
  }
  Person.prototype.getName = function(){}

  function Man(sexy){
    Person.call(this,'13'); //使用call来完成
    this.sexy = sexy;
  }
  var man1 = new Man('s1');
  var man2 = new Man('s2');
  man1 .instances.push('4');
  console.log(man2.instances) ; //  ['1','2','3'];
  //不同的对象都进行了实例化
  man1 .getName() //TypeError 因为没有继承原型链
  

3.组合继承

   function Person(age){
    this.age = age ;
    this.instances = ['1','2','3']
  }
  Person.prototype.getName = function(){}

  function Man(sexy){
    Person.call(this,'13');
    this.sexy = sexy;
  }
  Man.prototype = new Person();
  注:组合继承是 类式继承与构造函数继承的结合;
  问题:调用了两边父类函数:call/new Person()

4.原型继承

  function inheritObject(o){
    function F(){};
    F.prototype = o;
    return new F(); //返回过度对象的一个实例,
  }
  var person = {
    name : 'jack',
    instances : ['1','2','3']
  }
  var p1 = inheritObject(person );
  p1.name = '111'; //111
  p1.instances.push('4'); // ["1", "2", "3", "4", "5"]
  var p2 = inheritObject(person );
  p2.name = '222';  //222
  p2.instances.push('5'); // ["1", "2", "3", "4", "5"]
  注: 与类式继承一样,引用类型的值被共享了

5.寄生式继承

  function inheritObject(o){
    function F(){};
    F.prototype = o;
    return new F(); //返回过度对象的一个实例,
  }
  var person = {
    name : 'jack',
    instances : ['1','2','3']
  }
  function createPerson(obj){
    var o = new inheritObject(obj);
    o.getName = function(){};
    return o;
  }

6.寄生组合式继承

  function inheritPrototype(subClass,SuperClass){
    var p = inheritObject(SuperClass.prototype);
    p.constructor = subClass;
    subClass.prototype = p;
  }

相关文章

  • #js继承

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 类式继承是...

  • JS里的继承

    什么是继承继承的原理如何完成JS的继承? 什么是继承 继承就是子类拥有父类的各种属性和方法那什么是类?这里的JS的...

  • JS继承

    JS中的继承 许多OO语言都支持两种继承方式:接口继承和实现继承; 因为JS中没有类和接口的概念 , 所以JS不支...

  • js继承遇到的小问题

    这两天在看js继承方面,它不像OC那种传统的类继承。js继承方式还是挺多的。比如:原型继承、原型冒充、复制继承 原...

  • js 类的继承

    方法一:通过使用构造函数,prototype,inherit 和 method 方法来实现类的继承; 方法二:把原...

  • JS类的继承

    1.类式继承 构造函数继承 3.组合继承 4.原型继承 5.寄生式继承 6.寄生组合式继承

  • js面向对象实现面向对象(二)

    上一篇讲到js实现对类对封装,本篇介绍类的继承,多态。 类的继承 类式继承 类式继承方式是将父类的实例赋在子类的原...

  • JavaScript 10

    js继承的概念 1.通过原型链方式实现继承(对象间的继承) 2.类式继承(构造函数间的继承) 由于js不像Java...

  • JS对象和继承

    JS对象和继承 JS是个无类的语言,因此对于对象构造器(类)和对象的继承就值得我们研究了。本文讲述JS中构造器的表...

  • 请使用Js代码写出一个类继承的模型

    // 请使用Js代码写出一个类继承的模型// 请使用Js代码写出一个类继承的模型,需包含以下实现:// 定...

网友评论

      本文标题:JS类的继承

      本文链接:https://www.haomeiwen.com/subject/xosloxtx.html