js继承

本文深入探讨JavaScript中的多种继承模式,包括原型链继承、构造函数继承、组合继承及寄生组合继承等。通过具体实例展示了不同继承方式的特点及其应用场景。

 

构造函数的原型继承

        function qq(name,age) {
            this.name = name
            this.age = age
        }
        qq.prototype.eat = function () {
            console.log(this.name + '吃饭了')
        } 
        var f1 = new qq('熊熊',19)
        function son(){

        }
        son.prototype = f1
        var aa = new son()
        aa.eat()

注意:

当 son.prototype 指向 f1 时,它就已经是当爸爸的son了;

aa.eat() ; aa 中没有这此方法,该方法在父亲son原型中,当aa访问时,先在aa本身下查找,若没有则向它指向的原型中去查找该方法,若还是没有,则继续往上面的原型找。这样就形成了一条原型链。

 

通过原型链继承。

简写:

var f1 = new qq

var son.prototype = f1

// 直接简写成:

var son.prototype = new qq()

 

原型式继承

这种继承借助原型并基于已有的对象创建新对象,
同时还不必因此创建自定义类型 

function obj(o) {
            function F() {}
            F.prototype = o;
            return new F();
        }
        var box = {
            name:'熊熊',
            arr:["哥哥","妹妹","姐姐"]
        }
        var box1 = obj(box);
        console.log(box1.name)
        box1.name = '露露'
        console.log(box1.name)
        console.log(box1.arr)
        box1.arr.push('父母')
        console.log(box1.arr)
        var box2 = obj(box);
        console.log(box2.name)
        console.log(box2.arr) //引用类型共享了

 

 

组合继承

// 组合继承的优点在于属性和方法都可以继承
        // 组合继承 = 原型继承 + 构造函数继承
        function Supertype(name){
            this.name = name
            this.colors = ["red","orange","yellow"]
        }
        Supertype.prototype.Sayname = function(){
            console.log(this.name)
        }
        function Subtype(name,age){
            Supertype.call(this,name);
            this.age = age;
        }
        Subtype.prototype = new Supertype();
        Subtype.prototype.constructor = Subtype;
        Subtype.prototype.sayage = function(){
            console.log(this.age)
        }
        var instance = new Subtype("熊熊",19);
        instance.colors.push("green")
        console.log(instance.colors)
        instance.Sayname()
        instance.sayage()

 

寄生组合继承   

未完待续。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值