JavaScript的四种基本继承方式

## 标题

第一种继承,原型链继承(子类继承父类)

 function Father(){
            this.firstName = 'shuai'
        }
        var father = new Father();
        Father.prototype.lastName = 'wang';

        function Son(){
            this.firstName = 'ming';
            this.sex = 'nv';
        }
 Son.prototype = father;
        var son = new Son()
        // son继承father
        console.log(son.lastName,son.firstName,son.sex);// wang ming nv

        son.firstName = 'xiao';
        console.log(son.firstName,father.firstName);//xiao shuai

        Father.prototype.size = {
            height:180,
            weight:150,
            face:'黄'
        }
        father.size.face = '白';
        console.log(son.size.face,father.size.face);//白 白

纯粹的继承关系,实例是子类的实例,也是父类的实例。
父类新增原型方法/原型属性,子类都能访问的到
缺点:要想为子类新增属性和方法,必须要在new Animal()这样的语句之后执行,不能放到构造器中
无法实现继承多个
来自原型对象的所有属性被所有实例共享
创建子类实例时,无法向父类构造函数传参

第二种继承

  function Oys(){}
        Oys.prototype.lastName = 'shuai';
        Oys.prototype.fn = function(){
            console.log('我是Oys中函数输出的内容');
        }

        function Wk(){}
        Wk.prototype.sex = 'women';
        // 原型的继承 原型的污染  同一个原型
        Wk.prototype = Oys.prototype;

        var wk = new Wk();

        Wk.prototype.wife = 'dzl';
        var oys = new Oys()

        console.log(wk.wife,oys.wife);//dzl dzl

这种继承会造成互相污染,不推荐。

  // 第三种继承  非标准的继承
        function Father(name,age,sex){
            // son中添加对应的属性
            // this -> Son中的this
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        Father.prototype.car = '4个圈';
        function Son(name,age,sex){
            // this.name = name;
            // this -> son  Father中的this已经被改成当前son
            //在没有new完之前 并不清楚this指向谁 但是已经存在this1
            Father.call(this,name,age);
            // this ->{
            //     name:oys
            //     age:38
            //     sex:women
            //     girlFriend:美女1
            // }

            // Father.call()   Father()
            this.girlFriend = '美女1';

            // 隐式返回this
        }
        var son = new Son('oys',38,);  // 
        console.log(son);//{}
        // 让自己实例化 拥有对应的属性 name age sex



        function test(){
            console.log('aaa');
        }
        test.call();// 在不传递参数的情况下 等同于直接执行
        test();

这种继承是用call(),apply方法改变this的非标准继承方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值