美文网首页
JS高级-day09-微醺案例-封装 + 继承

JS高级-day09-微醺案例-封装 + 继承

作者: sheepl | 来源:发表于2022-05-27 14:41 被阅读0次

01-封装+继承案例需求

<script>
       /* 
      案例 : 目的 利用 面向对象的语法和思想 来结合 dom操作 解决实际的问题 

      1 定义父构造函数  
        HTMLElement  
         1 属性  dom 
         2 方法  appendTo 

      2 定义 一个儿子  HTMLDivElement
        1 会继承 父亲 属性和方法 
        2 儿子还有自己独立的功能  
            const  myDiv = new  HTMLDivElement("div中的文本")
            myDiv.appenTo("p")  ;  p标签中会多出有一个 文本为  “div中的文本”  的div
           儿子还会有自己的一个方法
           点击按钮  myDiv.scale(2);   缓慢放大两倍

      3 定义 另外一个儿子  HTMLImgElement 
        1 会继承 父亲 属性和方法  
        2 自己独立的功能
          const myImg = new HTMLImgElement(图片的地址)
          myImg.appendTo("a")  a标签中会多了一个 图片标签
          儿子还会有自己的一个方法
          点击某个按钮  myImg.borderRadius("50%")  缓慢变成 边框圆角 50% 效果 

      4 代码提示 
        1 先根据需求 把 代码的解构整理好   

        2 再去思考实现的逻辑 
       */


       function HTMLElement() {
        //  this.dom=....
       }
       HTMLElement.prototype.appentTo=function(){

       }
    </script>

02-实现-封装和继承案例

<body>
    <button>div放大两倍</button>
    <div class="box"></div>
    <script>
      /* 
        HTMLElement  
         1 属性  dom 
         2 方法  appendTo 
       */

      function HTMLElement() {
        this.dom = document.createElement('div');
      }

      HTMLElement.prototype.appendTo = function (selector) {
        document.querySelector(selector).append(this.dom);
      };

      // 儿子
      function HTMLDivElement(text) {
        HTMLElement.call(this); // this上多一个属性 dom dom = 动态创建的 div元素

        // this.dom =  真实的div 的dom元素
        this.dom.innerText = text;
        this.dom.style.textAlign = 'center';
      }

      // 继承父亲的方法
      HTMLDivElement.prototype.appendTo = HTMLElement.prototype.appendTo;
      // 自己的方法
      HTMLDivElement.prototype.scale = function (num) {
        this.dom.style.transition = '2s';
        this.dom.style.transform = `scale(${num})`;
      };

      const divEle = new HTMLDivElement('div中的文字');
      // console.log(divEle);
      divEle.appendTo('.box');

      const button = document.querySelector('button');
      button.addEventListener('click', function () {
        divEle.scale(2);
      });
    </script>
</body>

03-实现-封装和继承案例-优化

<body>
    <button>div放大两倍</button>
    <input type="button" value="设置图片缓慢边框圆角效果" />
    <div class="box"></div>
    <script>
      function HTMLElement(tagName) {
        this.dom = document.createElement(tagName);
      }
      HTMLElement.prototype.appendTo = function (select) {
        document.querySelector(select).append(this.dom);
      };

      function HTMLDivElement(text) {
        HTMLElement.call(this, 'div');
        this.dom.innerText = text;
        this.dom.style.textAlign   = 'center';
      }

      HTMLDivElement.prototype.appendTo = HTMLElement.prototype.appendTo;
      HTMLDivElement.prototype.scale = function (num) {
        this.dom.style.transition = '2s';
        
        this.dom.style.transform = `scale(${num})`;
      };

      function HTMLImgElement(src) {
        HTMLElement.call(this, 'img');
        this.dom.src = src;
      }
      HTMLImgElement.prototype.appendTo = HTMLElement.prototype.appendTo;
      HTMLImgElement.prototype.borderRadius = function (num) {
        this.dom.style.transition = '2s';
        this.dom.style.borderRadius = num;
      };

      const divEle = new HTMLDivElement('div中的文字');
      const imgEle = new HTMLImgElement('./images/1.png');

      divEle.appendTo('.box');
      imgEle.appendTo('.box');

      const input = document.querySelector('input');
      const button = document.querySelector('button');
      input.addEventListener('click', function () {
        imgEle.borderRadius('50%');
      });
      button.addEventListener('click', function () {
        divEle.scale(2)
      });

相关文章

  • JS一些总结

    JS高级总复习 Javascript基础复习 面向对象 把解决问题的重点放在解决问题相关的对象上 封装/继承/多态...

  • 面对对象高级编程

    面向对象高级编程: 面向对象编程:封装、继承和多态 面向对象高级编程:多重继承、定制类和元类

  • JS高级-继承

    面向对象编程思想:根据需求,分析对象,找到对象有什么特征和行为,通过代码的方式来实现需求,要想实现这个需求,就要创...

  • JS汇总---面向对象&数组

    面向对象 js原型链的继承 静态属性怎么继承 js原型链以及特点 面向对象有哪几个特点 封装,继承,多态 对象的继...

  • JS面向对象整理篇一——基础概念衍生

    JS面向对象 oop 继承:实例可以继承A对象中的方法和属性,减少代码冗余 封装:对象把实现过程封装在方法中,调用...

  • JavaScript继承

    js继承方式js是一门弱类型动态语言,封装和继承是他的两大特性 原型链继承 优点: 简单易于实现 实例是子类的实例...

  • JS高级继承方法

    前言: 上篇文章说了下,原型链继承 临时构造器继承!下面我们来说说继承其它的方法例如:属性拷贝,对象之间继承…...

  • 数据库mongodb封装库

    数据库mongodb封装库初级版 数据库mongodb封装库高级版 dbsetting.js文件代码:

  • 学生管理系统之项目分析

    第一部分 案例描述 案例目的 学习面向对象的主要特征和基本概念,包括类、对象、继承、接口、封装、继承、多态、方法的...

  • js的封装和继承

    封装 1、利用封装 优点:会为每个对象创建独享的函数对象,所有的属性和方法都为私有的 缺点:方法和属性都是固定的,...

网友评论

      本文标题:JS高级-day09-微醺案例-封装 + 继承

      本文链接:https://www.haomeiwen.com/subject/fdnnurtx.html