Es6新增的Class及class继承

class构造函数写法

若用Es6新增的class来构造函数,则需要考虑兼容问题,要是用高版本的浏览器。
那么如何用class来面对对象构造函数呢,下来来个小例子

下面这是工厂模式的面对对象构造函数写法

function Fn(){
this.name=“have a try”;
}
Fn.prototype.show=function(){};
var f=new Fn();
console.log(f);

下面这是class的写法

class Fn2(){
constructor(){
this.name=“have a try”;
}
show(){};
}
var f2=new Fn2();
console.log(f2);

class的继承

下面用拖拽盒子来写一个案例来体现class的继承
在页面上创建两个盒子,一个拖拽有边界,另一个没有,可以被脱出浏览器可是窗口外
这是css部

 .box1{width:100px;
              height:100px;
              background: black;
              position: absolute;
              left:0;
              top:0;
              color: white;
              text-align: center;
              font-size: 20px;
              line-height: 100px;
               }
               
               
         .box2{width:100px;
              height:100px;
              background: white;
              position: absolute;
              left:0;
              top:110px;
              color: black;
              text-align: center;
              font-size: 20px;
              line-height: 100px;
              border: 1px solid black;
             }

html部分

    <div class="box1">我出的去</div>
    <div class="box2">我出不去啊</div>

接下来就是js代码

 class Drag{
        constructor(ele){
            this.ele = ele;

            this.m = this.move.bind(this);
            this.u = this.up.bind(this);

            this.addEvent();
        }
        
         //添加事件   
        addEvent(){
            this.ele.addEventListener("mousedown",this.down.bind(this))
        }
        
        //当鼠标点下的时候
        down(eve){
            var e = eve || window.event;
            
            //鼠标相对事件源坐标
            this.x = e.offsetX;
            this.y = e.offsetY;
            //执行鼠标移动和鼠标抬起事件
            document.addEventListener("mousemove",this.m);
            document.addEventListener("mouseup",this.u);

            
            //取消默认事件
            e.preventDefault();
        }
        
        //拖拽物体的坐标  鼠标相对页面可视区域-鼠标相对事件源坐标
        move(eve){
            var e = eve || window.event;
            this.ele.style.left = e.clientX - this.x + "px";
            this.ele.style.top = e.clientY - this.y + "px";
        }
        //鼠标抬起时,删除之前的鼠标按下和鼠标移动时间,一次拖拽完成了
        up(){
            document.removeEventListener("mousemove",this.m)
            document.removeEventListener("mouseup",this.u)
        }
    }


    class SmallDrag extends Drag{
        constructor(ele) {
            super(ele)
        }
        
        //重新定义原型move
        move(eve){
            var e = eve || window.event;

            //x是鼠标相对页面可视区域-鼠标相对事件源坐标
            var x = e.clientX - this.x;
            var y = e.clientY - this.y;
            //出边界,则限定在边界
            if(x<0){
                x=0
            }
            if(y<0){
                y=0
            }
           //鼠标相对页面可视区域-鼠标相对事件源坐标>页面的可视区域的宽-box的可视区域内容的宽
            if(x > clientW - w){
            x = clientW - w;
            }
            if(y > clientH - h){
            y = clientH - h;
            }

            this.ele.style.left = x + "px";
            this.ele.style.top = y + "px";
        }
    }

    var obox1 = document.querySelector(".box1");
    var obox2 = document.querySelector(".box2");
    
    //获取页面的可视区域的宽高
    var clientW = document.documentElement.clientWidth;
    var clientH = document.documentElement.clientHeight;
    //第二个要有边界限制,所以获取第二个box的可视区域内容的宽高
    var w=obox2.offsetWidth;
    var h=obox2.offsetHeight;

    //第一个box执行无边界的
    new Drag(obox1);
    //第二个box只有有边界的继承drag有修改过的smallrag
    new SmallDrag(obox2);

    // 继承的应用场景:
    //     多个对象,互相之间有多个功能的重叠,可以使用继承,继承重叠的方法
    //     继承之后,如有差别,可以该别继承之后的方法
</script>
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值