zoukankan      html  css  js  c++  java
  • 类与模块化开发

    // 类     对象
    ​
    // 对象就是类的实例化体现
    // 类就是对象的抽象化表现
    ​
    // 父类  子类  超类superClass  基类BaseClass
    // 子类的父类称为超类
    ​
    // 范
    ​
    var obj={
        a:1,
        play:function(){
            console.log("play");
        },
        run:function(){
            console.log("run"+this.a);
        }
    }
    ​
    obj.play();//play
    obj.run(); //run1
    ​
    var obj={
        bool:false,
        init:function(){
            this.elem=document.createElement("div");
            Object.assign(this.elem.style,{
                "50px",
                height:"50px",
                backgroundColor:"#"+Math.floor(Math.random()*0xFFFFFF).toString(16).padStart(6,"0")
    ​
            });
            document.body.appendChild(this.elem);
            this.elem.addEventListener("click",e=>this.clickHandler(e));
        },
        clickHandler(e){
            this.bool=!this.bool;
            e.currentTarget.style.backgroundColor=this.bool ? "red" : "green";
            this.showBackground();
        },
        showBackground:function(){
            console.log(this.elem.style.backgroundColor);
        }
    }
    ​
    obj.init();
    obj.init(); 
    ​
    class A{
        a=1;
        // 构造函数
        constructor(){
    ​
        }
        play(){
            console.log("play");
        }
        run(){
            this.a++;
            console.log("run"+this.a);
        }
    } 
    ​
    // 实例化对象
    var a=new A();
    a.play();//play
    a.run();//run2
    a.run();//run3
    a.run();//run4
    var b=new A();
    b.play();//play
    b.run(); //run2
    // console.log(a);//A{a:4}
    ​
    class Box{
        // 当实例化时,就会自动执行构造函数
        a=0;
        constructor(a){
            this.a=a;
            this.elem=this.createElem();
        }
        createElem(){
            var elem=document.createElement("div");
            Object.assign(elem.style,{
                "50px",
                height:"50px",
                backgroundColor:"#"+Math.floor(Math.random()*0xFFFFFF).toString(16).padStart(6,"0")
            })
            document.body.appendChild(elem);
            elem.addEventListener("click",e=>this.clickHandler(e));
            return elem;
        }
        clickHandler(e){
            this.bool=!this.bool;
            e.currentTarget.style.backgroundColor=this.bool ? "red" : "green";
            this.showBackground();
        }
        showBackground(){
            console.log(this.elem.style.backgroundColor);
        }
    }
    ​
    class Ball extends Box{
        constructor(a){
            super(a);//超类的构造函数
            this.elem.style.borderRadius="50px";
        }
        clickHandler(e){
            // 会覆盖父类这个方法的内容  override
            super.clickHandler(e);//先执行父类的该方法
            console.log(this.a);
        }
    }
    ​
    var b=new Ball(5);//实例化对象,加(),类似于函数(当实例化时执行了constructor函数)
    var c=new Box(6); 

    ES6模块开发

    <script type="module">
    import A from "./js/A.js";//export default的可以直接import
    import {B,C} from "./js/B.js";//{}里写的不是默认的default
    ​
    var a=new A();
    var b=new B();
    var c=new C();
    console.log(a,b,c); //双击打开会报错
    ​
    var a=new A(4,5,6,7,8,9);
    var obj={
        a:1,b:2,c:3
    }
    var o={d:10};
    o={...obj};//浅复制
    //重新创建一个对象,并且将obj复制给这个新的对象,不会保留原对象的属性
    console.log(o); 
    ​
    import Arrays from "./js/A.js";
    ​
    var arr=new Arrays(3,4,5);
    // arr.constructor===Arrays;
    arr.push();
    arr.join();
    ​
    Arrays.form();
    Arrays.isArray()
    console.log(arr);
    ​
    Math.PI
    </script>
    //A.js
    export default class Arrays{
        // 参数可以设置初始值
        /*constructor(a,b,c=3){
    ​
        } */
        // ...arg 参数允许由不定量数据,arg最后是一个数组
        /*constructor(a,b,...arg){
            console.log(a,b,arg);
        } */
        a=[];
        constructor(len,...arg){//创建数组
           if(arg.length===0 && len.constructor===Number){//第一位参数是数值
               if(len===Math.floor(len)) this.a.length=len;
               else console.error("输入错误的长度");
               return;
           }
           this.a[0]=len;
           for(var i=0;i<arg.length;i++){
               this.a[i+1]=arg[i];
           }
        }
        push(...arg){
    ​
        }
        pop(){
    ​
        }
        unshift(...arg){
    ​
        }
        shift(){
    ​
        }
        splice(start,len,...arg){
    ​
        }
        join(str){//对象调用的方法
    ​
        }
        static from(){//这个数组的类调用的方法,静态方法中不能写this
    ​
        }
        static isArray(){
    ​
        }
    }
    ​
    export class Maths{
        static PI=3.1415926;
        static abs(){
    ​
        }
        static floor(){
    ​
        }
    }
    // Maths.PI
    // Maths.abs();
    // Maths.floor();
    //B.js
    export class B{//没有加default,导出多个类
    ​
    }
    export class C{
        
    }

    多选框和单选框

    <div class="divs"></div>
    <script type="module">
    // import CheckBox from "./js/CheckBox.js";
    import Radio from "./js/Radio.js";
    ​
    var  list=[];
    let arr=["看书","游泳","写代码","跑步","看电影","逛街"];
    arr.forEach(function(item){
        let ck=new Radio(item,"hobby");
        ck.appendTo(".divs");
        list.push(ck);
    })
    </script>
    //CheckBox.js
    export default class CheckBox{
        // 构造函数就是当前类别实例化时初始执行的函数,在外面我们也可以认为
        // 构造函数的名字等同于类名
        // 构造函数中不能使用return返回某个对象
        // 构造函数中会自动返回this,如果使用return就会覆盖内容
        // 构造函数中的this,就是实例化完成的对象
        elem;
        label;
        checked=false;
        constructor(_label){
            this.label=_label;
            this.elem=this.createElem();
        }
        createElem(){
            if(this.elem) return this.elem;g//如果elem已经创建了把它赋值回去,不会重复创建
            let div=document.createElement("div");
            div.style.float="left";
            div.style.marginRight="12px";
            div.style.position="relative";
            let icon=document.createElement("span");
            Object.assign(icon.style,{
                "14px",
                height:"14px",
                position:"relative",
                display:"inline-block",
                marginRight:"8px",
                backgroundImage:"url('./img/new_icon.png')",
                backgroundPositionX:"-238px",
                backgroundPositionY:"-37px",
            });
            div.appendChild(icon);
            let labelSpan=document.createElement("span");
            labelSpan.textContent=this.label;
            labelSpan.style.userSelect="none";
            labelSpan.style.position="relative"
            div.appendChild(labelSpan);
            div.addEventListener("click",e=>this.clickHandler(e));
            return div;
        }
        appendTo(parent){
            if(typeof parent==="string") parent=document.querySelector(parent);
            parent.appendChild(this.elem);
        }
        clickHandler(e){
            this.checked=!this.checked;
            Object.assign(this.elem.firstElementChild.style,{
                backgroundPositionX:this.checked ? "-128px" : "-238px",
                backgroundPositionY:this.checked ? "-126px" : "-37px"
            })
           
        }
    }
    //radio.js
    import CheckBox from "./CheckBox.js";
    ​
    export default class Radio extends CheckBox{
        name;
        constructor(_lable,_name){
            super(_lable);
            this.name=_name;
            Object.assign(this.elem.firstElementChild.style,{
                "18px",
                height:"18px",
                backgroundPositionX:"-195px",
                backgroundPositionY:"-104px",
            });
            Object.assign(this.elem.lastElementChild.style,{
                top:"-2px"
            });
            this.elem.setAttribute("name",_name);
        }
        clickHandler(e){
            this.checked=true
            let arr=Array.from(document.getElementsByName(this.name));
            for(var i=0;i<arr.length;i++){
                if(arr[i]===this.elem){
                    Object.assign(this.elem.firstElementChild.style,{
                        backgroundPositionX:"-175px",
                        backgroundPositionY:"-104px",
                    });
                }else{
                    Object.assign(arr[i].firstElementChild.style,{
                        backgroundPositionX:"-195px",
                        backgroundPositionY:"-104px",
                    });
                }
            }
        }
    }

    动画

    <style>
        .ball{
            50px;
            height: 50px;
            
            border-radius: 50%;
            position: absolute;
            left:0;
            top:0;
        }
        .box
        {
            800px;
            height:400px;
            border: 1px solid #000000;
            position: relative;
            margin: auto;
            left: 0;
            right: 0;
        }
    </style>
    <div class="box">
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
        <div class="ball"></div>
    </div>
    <script>
        // 帧频  1秒中播放多少帧 
        //  帧 1帧就是一张图片播放的时间
        //  60帧频
        // 1000/60=16.666666
        /* var balls;
        var ids;
    ​
        init();
        function init(){
            balls=document.querySelectorAll(".ball");
            for(var i=0;i<balls.length;i++){
                balls[i].speedX=Math.floor(Math.random()*5)+1;
                balls[i].speedY=Math.floor(Math.random()*6)+1;
                balls[i].x=Math.floor(Math.random()*700);
                balls[i].y=Math.floor(Math.random()*300);
            }
            animation();
        }
    ​
        function animation(){
            // 开启固定60帧频
            ids=requestAnimationFrame(animation);
        //    cancelAnimationFrame(ids);//清除时间帧请求
            for(var i=0;i<balls.length;i++){
                if(balls[i].x+50>800 || balls[i].x<0) balls[i].speedX=-balls[i].speedX;
                if(balls[i].y+50>400 || balls[i].y<0) balls[i].speedY=-balls[i].speedY;
                balls[i].x+=balls[i].speedX;
                balls[i].y+=balls[i].speedY;
                balls[i].style.left=balls[i].x+"px";
                balls[i].style.top=balls[i].y+"px";
            }
        }
    */
    </script>

     

  • 相关阅读:
    C/C++之指针
    mysql--sql语言之DDL,DML
    mysql--之在Windows上的安装
    mysql--之mysql在linux上的安装
    动态资源和静态资源
    Tomcat文件夹和server配置文件解析
    和 的区别
    个数可变形参
    Java方法里参数的传递机制
    8中基本数据类型
  • 原文地址:https://www.cnblogs.com/ananasfleisch/p/13379112.html
Copyright © 2011-2022 走看看