继承的实现方式

Posted pavilion-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承的实现方式相关的知识,希望对你有一定的参考价值。

1.继承的实现方式

    自己没有的别人有拿过来用,就是继承

1.1 混入式继承(mix-in)

       var obj={};
       var obj1 = {
            name: "王健林",
            money: "赚它一个亿",
            makeMoney: function () {
                console.log("再赚他一个亿");
            }
        }   
        // for(var k in obj1){
        //     obj[k] = obj1[k];
        // }
        // // console.log(obj.money);

1.2. 原型继承 (要有构造函数)

     利用原型实现的继承效果,就是原型继承

     function Person(){
        }
       var obj1 = {
            name: "王健林",
            money: "赚它一个亿",
            makeMoney: function () {
                console.log("再赚他一个亿");
            }
        }
     var obj=new Person();
1.2.1 利用混入的方式,将要继承的对象的所有的属性和方法添加到当前对象的原型中
        // for(var k in obj1){
        //     obj[k] = obj1[k];
        // }
        // // console.log(obj.money);
1.2.2 直接将要继承的对象作为当前对象的原型!
        // Person.prototype = obj1;
        // var obj = new Person();
         // console.log(obj.money);

1.3. 经典继承

     其实经典继承就是原型继承的另外一种实现方式!
     Object.create();
    1.3.1 语法: var 对象 = Object.create(要继承的对象);
    1.3.2 功能: Object.create方法,可以用来创建一个对象,这个对象的原型,就是参数中传递进去的对象
    1.3.3 原理: 其实就是将参数中传入的对象,作为了新对象的原型! 
        // var obj = {
        //     name: "朱三辉",
        //     sing: function () {
        //         console.log("我已开始练习,开始慢慢熟悉");
        //     }
        // };
        // var p = Object.create(obj);
        // console.log(p.__proto__ === obj);
        // p.sing();
    1.3.4 Object.create方法有兼容性问题!
        //解决兼容性问题
        //我们自己封装的快速实现原型继承(经典继承)的方式
        function myCreate(obj){
            if(Object.create){
                return Object.create(obj);
            }else{
                function F(){}
                F.prototype = obj;
                return new F();
            }
        }

2.继承的应用(帮所有的数组对象,添加一个方法 sum)

2.1 直接给Array原型添加属性和方法(最简单但是不稳妥的解决方案!)

        //     Array.prototype.sum = function () {
        //     var result = 0;
        //     for(var i = 0; i < this.length; i ++){
        //         result += this[i];
        //     }
        //     return result;
        // }
        // var arr = [1, 2, 3];
        // var result = arr.sum();

2.2 要实现的功能,给所有的数组加上一个sum方法!(安全的扩展内置对象)

       function MyArray () {
        }
        MyArray.prototype = []; 
        MyArray.prototype.sum = function () {
            var result = 0;
            for(var i = 0; i < this.length; i ++){
                result += this[i];
            }
            return result;
        } 
        var arr = new MyArray(); 
        arr.push(1);
        console.log(arr.sum());
 
技术分享图片

 


以上是关于继承的实现方式的主要内容,如果未能解决你的问题,请参考以下文章

js实现继承的5种方式

继承的几种方式

js 继承方式

WPF中窗体之间的继承是如何实现的?说下实现方式...

菱形继承的内部实现方式

JavaScript是如何实现继承的(六种方式)