• js 继承


    1、将继承部分封装成函数

    <html> <head> <script> function extend(Child,Parent){ var F = function(){}; F.prototype = Parent.prototype; Child.prototype=new F(); Child.prototype.constructor=Child; Child.uber=Parent.prototype; } function Shape() {} Shape.prototype.name = 'Shape'; Shape.prototype.toString = function () { return this.constructor.uber ? this.constructor.uber.toString() + ', ' + this.name : this.name; }; function TwoDShape() {} extend(TwoDShape,Shape); TwoDShape.prototype.name = '2D shape'; function Triangle(side, height) { this.side = side; this.height = height; } extend(Triangle,TwoDShape); Triangle.prototype.name = 'Triangle'; Triangle.prototype.getArea = function () { return this.side * this.height / 2; }; function myclick(){ var my = new Triangle(); console.log(my.toString()); } </script> </head> <body> <div style="100px;height:100px;background:red;" onclick="myclick()"></div> </body> </html>

     2、属性拷贝

    <html>
    <head>
    <script>
    function extend2(Child,Parent){
        var p = Parent.prototype;
        var c = Child.prototype;
        for(var i in p){
            c[i] = p[i];
        }
        c.uber = p;
    }
    
    function Shape() {}
    Shape.prototype.name = 'Shape';
    Shape.prototype.toString = function () {
        return this.constructor.uber
        ? this.constructor.uber.toString() + ', ' + this.name
        : this.name;
    };
    
    
    function TwoDShape() {}
    extend2(TwoDShape,Shape);
    TwoDShape.prototype.name = '2D shape';
    
    
    function Triangle(side, height) {
        this.side = side;
        this.height = height;
    }
    extend2(Triangle,TwoDShape);
    Triangle.prototype.name = 'Triangle';
    Triangle.prototype.getArea = function () {
        return this.side * this.height / 2;
    };
    
    function myclick(){
        var my = new Triangle();
        console.log(my.toString());
    }
    </script>
    </head>
    <body>
    <div style="100px;height:100px;background:red;" onclick="myclick()"></div>
    </body>
    </html>

     3、属性拷贝

    function extend2(Child,Parent){
        var p = Parent.prototype;
        var c = Child.prototype;
        for(var i in p){
            c[i] = p[i];
        }
        c.uber = p;
    }

    4、对象之间的继承

    function extendCopy(p){
        var c = {};
        for(var i in p)
        {
            c[i] = p[i];
        }
        c.uber = p;
        return c;
    }

    5、深复制

    function deepCopy(p,c){
        c = c||{};
        for(var i in p){
            if(p.hasOwnProperty(i)){
                if(typeof p[i] === 'object')
                {
                    c[i] = Array.isArray(p[i])?[]:{};
                    deepCopy(p[i],c[i]);
                } else {
                    c[i] = p[i];
                }
            } 
        }
        return c;
    }

    6、object()

    function object(o){
        var n;
        function F(){}
        F.prototype=o;
        n = new F();
        n.uber=o;
        return n;
    }

    7、原型继承与属性复制的混合应用 

    function objectPlus(o,stuff){
        var n;
        function F(){}
        F.prototype = o;
        n = new F();
        n.uber = o;
        for(var i in stuff){
            n[i] = stuff[i];
        }
        return n;
    }

     8、多重继承

    function multi(){
        var n = {}, stuff, j=0, len=arguments.length;
        for(j=0;j<len;j++){
            stuff = arguments[j];
            for(var i in stuff){
                if(stuff.hasOwnProperty(i)){
                    n[i]=stuff[i];
                }
            }
        }
        return n;
    }

    9、寄生式继承

    10、构造器借用

  • 相关阅读:
    FZOJ2115+月赛+多项式
    Statistical Data Mining Tutorials [转]
    码农何去何从
    关于InnoDB索引长度限制的tips
    虚拟化、云计算、开放源代码及其他
    互联网开放平台应用综述
    2012.09月面试五十题
    linux运维常用命令
    Linux 性能测试与分析转
    "Principles of Computer Systems Design"
  • 原文地址:https://www.cnblogs.com/zhangwei595806165/p/5397869.html
Copyright © 2020-2023  润新知