zoukankan      html  css  js  c++  java
  • 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、构造器借用

  • 相关阅读:
    Spring ApplicationListener 理解
    Tomcat 的context.xml说明、Context标签讲解
    IntrospectorCleanupListener作用
    Dubbo 和 Spring Cloud微服务架构 比较及相关差异
    ZooKeeper原理 --------这可能是把ZooKeeper概念讲的最清楚的一篇文章
    Dubbo 入门
    makefile的调试器remake
    linux下的nmap工具能干什么?
    makefile中的patsubst函数有何作用?
    openwrt为何需要refresh新增的补丁?
  • 原文地址:https://www.cnblogs.com/zhangwei595806165/p/5397869.html
Copyright © 2011-2022 走看看