Rumah > hujung hadapan web > tutorial js > 原型继承的几种方式介绍

原型继承的几种方式介绍

一个新手
Lepaskan: 2017-10-16 09:16:46
asal
1372 orang telah melayarinya

原型继承

父级:

    function Parent(name){
        this.name=name;
    }
    Parent.prototype.sayHello=function(){
        console.log("Hello,"+this.name);
    }
Salin selepas log masuk
  1. 原型链继承

    function Kid(){};
    Kid.prototype=new Parent("who");
    
    var k=new Kid();
    console.log(k.name); //who
    console.log(k.sayHello()); //Hello,who
    Salin selepas log masuk

    弊端:创建实例时无法向父级传参

  2. 构造继承

    function Kid(name){
        Parent.call(this,name);
    };
    
    var k=new Kid("who");
    console.log(k.name); //who
    console.log(k.sayHello()); //error
    Salin selepas log masuk

    弊端:无法获取父级原型链属性

  3. 实例继承

    function Kid(name){
        var p=new Parent(name);
        return p;
    };
    
    var k=new Kid("who");
    console.log(k.name); //who
    console.log(k.sayHello()); //Hello,who
    Salin selepas log masuk

    弊端:实例是父级的实例

  4. 拷贝继承

    function Kid(name){
        var p=new Parent(name);
        for(var item in p){
            Kid.prototype[item]=p[item];
        }
    }
    
    var k=new Kid("who");
    console.log(k.name); //who
    console.log(k.sayHello()); //Hello,who
    Salin selepas log masuk

    弊端:太占用内存

  5. 组合继承

    function Kid(name){
        Parent.call(this,name);
    }
    Kid.prototype=new Parent();
    
    var k=new Kid("who");
    console.log(k.name); //who
    console.log(k.sayHello()); //Hello,who
    Salin selepas log masuk

    弊端:调用了两次父类构造函数

  6. 寄生组合继承

    function Kid(name){
        Parent.call(this,name);
    }
    (function(){
        var p=function(){};
        p.prototype=Parent.prototype;
        Kid.prototype=new p();
    })()
    Salin selepas log masuk

    弊端:写法比较繁琐

    Atas ialah kandungan terperinci 原型继承的几种方式介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan