recherche

Maison  >  Questions et réponses  >  le corps du texte

JavaScript有多少种继承模式?

JavaScript有多少种继承模式?

末日的春天末日的春天2821 Il y a quelques jours1045

répondre à tous(2)je répondrai

  • 数据分析师

    数据分析师2017-10-01 00:49:45

    Combien de modes d’héritage JavaScript possède-t-il ? - Questions et réponses sur le site Web chinois PHP - Combien de modes d'héritage existe-t-il en JavaScript ? - Questions et réponses sur le site Web chinois PHP

    Veuillez regarder et apprendre.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-03-13 09:25:08

    下面来谈谈JS中比较简单的继承方法:

    1. 借用构造函数继承

    function Father (name) {
    this.name=name;
    }
    function Son (name) {
    Father.call(this,name); //在子类型中调用超类型的构造函数
    this.age=15;
    }
    var me=new Son("Su");

    好处:可以为子类型传递参数。

    坏处:1.方法在构造函数中定义,无法复用。2.超类型原型中定义的方法对子类型是不可见的。

    2.组合继承(综合原型链与构造函数)

    //超类型构造函数function Father (name) {
    this.name=name;
    this.famMember=[];
    }//超类型构造函数原型方法
    Father.prototype.sayName=function () {
    alert(this.name);
    }//子类型构造函数
    function Son (name,age) {
    Father.call(this,name); //构造函数方法
    this.age=age;
    }
    Son.prototype=new Father(); //重写子类型原型对象
    Son.prototype.constructor=Son; //重写构造函数属性指向子类型
    Son.prototype.sayAge=function () {
    alert(this.age);
    } //重写原型对象后再加入方法
    var me=new Son("Su",15);
    me.famMember.push("dad","mom"); //子类型可以调用超类型构造函数内的方法var he=new Son("Li",14);alert(he.famMember); // []

    好处:不同的子类既可以拥有自己的属性,也可以使用相同的方法。

    坏处:这种方法需要调用2次超类型的构造函数,同名的属性方法会被覆盖一次。

    3.原型式继承 (类似Object.create())

    function object (o) {
    function F () {}
    F.prototype=o;
    return new F();
    }var obj={}; //将obj对象传入作为新对象的原型。var me=object(obj);

    使用这种方法继承需要有一个对象作为原型对象,所以所有继承其的子类型的属性方法都是共用的。

    4.寄生式继承 (可以设置私有方法的原型式继承)

    function object (o) {
    function F () {}
    F.prototype=o;
    return new F();
    }
    var obj={}; //将obj对象传入作为新对象的原型。到这里都与原型式继承相同function creObj(o) {  var clone=object(obj);  clone.sayHi=function () {    alert("Hi");  };return clone; }
    var me=creObj(obj);

    好处:这种方式弥补了原型式继承只有公有属性方法的缺陷,使子类型能有私有属性方法。

    5.寄生组合式继承

    function inherit (father,son) {
    var pro=Object(father.prototype); //创建超类型原型对象的副本
    pro.constructor=son;
    son.prototype=pro;           //将副本作为子类型的原型对象
    }

    本方法用于弥补组合继承中属性方法覆盖的问题。

    répondre
    0
  • Annulerrépondre