Web前端-JS高级继承的方式

 

什么是继承?
            人类活动中 继承就是子承父业
            在强类型编程语言中  子类继承父类  子类具有父类的功能

            但是js是弱类型语言 不存在自定义类型 那么
            js中的继承是什么呢?
                别的对象有什么功能 我也能拿过来 自己也拥有 就是继承


   实现继承的几种方式:

 被继承的对象

 var obj={
        name:"小白白",
        age:16,
        show:function () {
            console.log("请不要秀");
        },
        eat:function () {
            console.log("慢点吃");
        }
        
    }

            1.对象混入式继承:
               for  in遍历被继承的对象  绑定给新对象

var per={}

    for(var k in obj){
        per[k]=obj[k];

    }
//    console.log(per);
//    console.log(per===obj);//false
    console.log(per.name);
    per.show();

            2.对象默认继承原型
                对象默认会继承当前对象关联的那个原型里面的属性跟方法

function Person() {
            
        }
        Person.prototype.show=function () {
            console.log("原型的show");
        }
        var per=new Person();
        per.show();

            3.原型替换继承
                直接把当前构造函数对应的原型替换成要想继承的对象

function Person() {

        }
//        把要继承的对象替换为当前构造函数的原型
        Person.prototype=obj;

        /!*var per=new Person();

        console.log(per.name);
        per.show();
        per.eat();*!/

            4.原型混入式继承
                把要继承的对象 通过 for  in遍历 所有属性跟方法绑定给当前
                原型  那么当前原型所关联的所有对象都可以调用被继承的对象
                里面的属性跟方法

function Person() {
            
        }
        for(var k in obj){
            Person.prototype[k]=obj[k];

        }

        var per=new Person();
        console.log(per.name);
        per.show();
        per.eat();

            5.<<JavaScript语言精粹>> 这本书提供了一种方式

function extend(o){
        function F() {
            
        }
        F.prototype=o;
        return new F();
    }


    var newObj=extend(obj);
//    console.log(newObj);
    console.log(newObj.name);
    console.log(newObj.age);
    newObj.show();


            6.ECMAScript官方推出的 Object.create方法

var newObj=  Object.create(obj);
//      console.log(newObj);
        console.log(newObj.name);
        newObj.show();


            7.自己封装兼容性写法

 function create(o) {
            if(Object.create){
                return Object.create(o);

            }else{
                function F(){

                }
                F.prototype=o;
//                因为F这个构造函数纯是为了实现原型替换临时创建的 所有原型的构造函数被替换也无所谓
          /*      F.prototype.constructor=F;*/

                return new F();
            }

        }


//验证封装
     var newObj=   create(obj)
        console.log(newObj.name);
        console.log(newObj.age);
        newObj.show();
        newObj.eat();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值