zoukankan      html  css  js  c++  java
  • 面向对象

          // 面向过程

            // 按照用例的顺序一步步执行的程序过程,叫做面向过程
            // 用例,用户操作的实例

            // 面向对象
            // 任何事物都属于对象,因此我们将所有事物归类设置,根据类别创建不同对象
            // 根据这些不同的对象组合完成整个项目


            // 类别   对象
            // 类别是一种抽象的概念   对象是根据类别实际创建出来的案例
            // 把根据类别创建出案例的过程叫做实例化对象
     
    案例
     
    // 若干个小方块,颜色不同,一起向右运行,
     // 点击一个小方块,就会停止,再点击继续前进,每个方块直接不会互相影响
     
    代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div class="div1"></div>
        <script>
            // rect类
            class Rect{
                // 构造函数
                // 三个变量
                box;
                bool=false;
                // 定位变量的储存值x
                x=0;
                constructor(){
                    // 把新建的div赋值给全局变量box   构造函数内调用全局变量要用this
                    this.box=this.createElement();
                }
                // 创建元素
                createElement() {
                    // 找到窗口里的div元素赋值给变量div
                  let div=document.createElement("div");
                //   设置div的样式 背景颜色处理函数 侦听事件及处理函数 返还数据到div
                  div.style.width="50px";
                  div.style.height="50px";
                  div.style.position="absolute";
                  div.style.backgroundColor=this.randomColor();
                  div.addEventListener("click",e=>this.clickHandler(e));
                  return div;  
                }
                // 随机颜色处理函数
                randomColor(){
                    // 声明函数color 添加一个颜色起始的#
                    let color="#";
                    // for 循环添加六位随机0-16的数转换为16进制添加到color
                    for(let i=0;i<6;i++){
                        color+=Math.floor(Math.random()*16).toString(16);
                    }
                    // 传出color数据
                    return color;
                }
                // 创建元素并添加到  这里的传参parent是body
                appendTo(parent){
                    // 如果parent的数据类型是字符串
                    if(typeof parent==="string"){
                        // parent相当于窗口下的找到的parent
                        parent=document.querySelector(parent);
                    }
                    console.log(parent);
                    // 报错说,parent对象没有appendchild方法,我们打印检查 null
                    // 创建box的元素到body内
                    parent.appendChild(this.box); 
                }
                // 点击事件处理函数
                clickHandler(e){
                    // 每次点击bool值发生改变 取反相等 起到一个开关的作用
                    this.bool=!this.bool;
                }
                // 控制创建元素的left定位
                update(){
                    // 如果这时的bool是true 直接返回不执行
                    if(this.bool) return;
                    // 全局变量x累加2
                    this.x+=2;
                    // 点击元素的left样式值等于全局样式x的值,实现一直往右位移
                    this.box.style.left=this.x+"px"; // 是this.x 不是x
                }
            }
            // main类
            class Main{
                // 新建一个空数组
                list=[];
                // 构造函数
                 constructor(){
                    //  for循环 i最小0 最大9 累加
                     for(let i=0;i<10;i++){
                        //  当使用实例化对象时,会执行Rect类型中constructor方法
                     let box=new Rect();
                    //  把box的数据创建并添加到class名为div1的元素中
                     box.appendTo(".div1"); // 这里是div1 不是div
                    //  把list的元素全部添加到box里
                     this.list.push(box);
                     }
                    //  设置每一个元素的函数执行时间为16毫秒的间隔
                     setInterval(()=>this.animation(),16);
                 }
                //  把数组里得到的元素分别创建
                 animation(){
                     for(let i=0;i<this.list.length;i++){
                         this.list[i].update();
                     }
                 }
            }
            new Main();
        </script>
    </body>
    </html>

    分析总结:在面向对象编程中的全局变量可以不用let或var声明,函数的function前缀也省略了,调用变量前缀要加this,以及函数也要添加this前缀。

  • 相关阅读:
    最小生成树+BFS J
    Noip 2016
    舒适的路线 (code[vs] 1001)
    拦截导弹 (加了神奇的位运算)
    逃出克隆岛 (codevs 2059)
    回家(洛谷 P1592)
    热浪
    城堡
    笔记 (一道正解思路巧妙的题)
    脱水缩合
  • 原文地址:https://www.cnblogs.com/zqm0924/p/12676761.html
Copyright © 2011-2022 走看看