• js继承实例


    <html>
    <head>
    <script>
    function Point(x,y){
        this.x=x;
        this.y=y;
    }
    
    function Line(p1,p2){
        this.p1 = p1;
        this.p2 = p2;
        this.length=Math.sqrt(Math.pow(p1.x - p2.x,2)+
        Math.pow(p1.y - p2.y,2));
    }
    
    function Shape(){
        this.points = [];
        this.lines = [];
        this.init();
    }
    Shape.prototype={
        constructor:Shape,
        init:function(){
            if(this.context === undefined){
            var canvas = document.getElementById('canvas');
            Shape.prototype.context = canvas.getContext('2d');
                //var canvas = document.getElementById('canvas');
                //Shape.prototype.context = canvas.getContext('2d');
            }
        },
        draw:function(){
            var i,ctx=this.context;
            ctx.strokeStyle = this.getColor();
            ctx.beginPath();
            ctx.moveTo(this.points[0].x,this.points[0].y);
            for(i=1;i<this.points.length;i++){
                ctx.lineTo(this.points[i].x,this.points[i].y);
            }
            ctx.closePath();
            ctx.stroke();
        },
        getColor:function(){
            var i,rgb = [];
            for(i=0;i<3;i++){
                rgb[i] = Math.round(255 * Math.random());
            }
            return 'rgb('+rgb.join(',')+')';
        },
        getLines:function(){
            if(this.lines.length > 0){
                return this.lines;
            }
            var i,lines=[];
            for(i=0;i<this.points.length;i++){
                lines[i] = new Line(this.points[i],
                this.points[i+1] || this.points[0]);
            }
            this.lines = lines;
            return lines;
        },
        getArea:function(){},
        getPerimeter:function(){
            var i,perim = 0,lines = this.getLines();
            for(i=0;i<lines.length;i++){
                perim += lines[i].length;
            }
            return perim;
        }
    };
    
    function Triangle(a,b,c){
        this.points = [a,b,c];
        this.getArea = function(){
            var p = this.getPerimeter();
            s = p/2;
            return Math.sqrt(s
                                *(s-this.lines[0].length)
                                *(s-this.lines[1].length)
                                *(s-this.lines[2].length));
        }
    }
    
    function Rectangle(p,side_a,side_b){
        this.points=[p,
                        new Point(p.x + side_a,p.y),
                        new Point(p.x + side_a,p.y+side_b),
                        new Point(p.x,p.y + side_b)];
        this.getArea=function(){
            return side_a*side_b;
        }
    }
    
    function Square(p,side){
        Rectangle.call(this,p,side,side);
    }
    
    function myclick(){
        var s = new Shape();
        Triangle.prototype = s;
        Rectangle.prototype = s;
        Square.prototype = s;
        var p1 = new Point(100,100);
        var p2 = new Point(300,100);
        var p3 = new Point(200,0);
        
        var t = new Triangle(p1,p2,p3);
        t.draw();
        console.log(t.getPerimeter());
        console.log(t.getArea());
        
        var r = new Rectangle(new Point(200,200),50,100);
        r.draw();
        console.log(r.getArea());
        console.log(r.getPerimeter());
        
        var s = new Square(new Point(130,130),50);
        s.draw();
        console.log(s.getArea());
        console.log(s.getPerimeter());
        
        new Square(p1,200).draw();
    }
    </script>
    </head>
    <body>
    <canvas height="600" width="800" id="canvas" onclick="myclick()"/>
    </body>
    </html>

    效果:

  • 相关阅读:
    变量和基本数据类型,深浅拷贝问题
    计算机系统与编程语言分类
    关于计算机硬件的基本知识
    Python学习之路——函数
    Python学习之路——Day06 元组
    day--07
    数据类型——可变不可变类型
    数字类型
    流程控制——while循环
    流程控制——if判断
  • 原文地址:https://www.cnblogs.com/zhangwei595806165/p/5413002.html
Copyright © 2020-2023  润新知