zoukankan      html  css  js  c++  java
  • JavaScript 中的原型声明和用法总结

    下面是自己写的一个关于js的拖拽的原型声明:代码如下

    需要注意的问题包括:

    1.this的指向到底是指向谁--弄清楚所指的对象

    2.call()方法的使用

    3.直接将父级原型赋给子级与使用for将其赋给子级有什么区别?

    比如:for(var i in Drag.prototype)
    {
        LimitDrag.prototype[i]=Drag.prototype[i];----------子级发生改变,其父级并不会受到影响
    }

      LimitDrag.prototype=Drag.prototype;---------直接将原型赋给子级,会导致当子级发生改变时,其父级也会随之而改变。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <style>
    #div1 {100px; height:100px; background:red; position:absolute;}
    #div2 {100px; height:100px; background:yellow; position:absolute;}
    </style>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>拖拽--面向对象</title>
    <script>
    window.onload=function()
    {
        new Drag('div1');
        new LimitDrag('div2');
    }
    function  Drag(id)
    {
         var _this=this;//这个this表示p1
         this.disx=0;
         this.disy=0;
         this.oDiv=document.getElementById(id);
         this.oDiv.onmousedown=function(ev){//按下的时候有个事件,传递给下面的事件
            _this.fnDown(ev);
            return false;
         }
    };
    Drag.prototype.fnDown=function(ev)
    {
            var _this=this;
            var oEvent=ev||event;
            this.disx=oEvent.clientX-this.oDiv.offsetLeft;
            this.disy=oEvent.clientY-this.oDiv.offsetTop;
            document.onmousemove=function(ev){//移动的时候有个事件
                  _this.fnMove(ev);
            }
            document.onmouseup=function(){
                 _this.fnUp();
            }
    };  
     Drag.prototype.fnMove=function(ev)
    {
                var oEvent=ev||event;
                this.oDiv.style.left=oEvent.clientX-this.disx+'px';
                this.oDiv.style.top=oEvent.clientY-this.disy+'px';
    };
    Drag.prototype.fnUp=function()
    {
             document.onmousemove=null;
             document.onmouseup=null;
    };
    //继承Drag的所有属性
    function LimitDrag(id)
    {
            Drag.call(this,id);//这个this指LimitDrag new的对象
    }
    //得到Drag的方法,遍历其原型
    for(var i in Drag.prototype)
    {
        LimitDrag.prototype[i]=Drag.prototype[i];
    }
    //改变Drag的fnMove的方法
    LimitDrag.prototype.fnMove=function(ev)
    {
        var oEvent=ev||event;
        var l=oEvent.clientX-this.disx;
        var t=oEvent.clientY-this.disy;
        if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth)
        {
            l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
        }
        else if(l<0)
        {
            l=0;
        }
         if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight)
        {
            t=document.documentElement.clientHeight-this.oDiv.offsetHeight;
        }
        else if(t<0)
        {
            t=0;
        }
         this.oDiv.style.left=l+'px';
         this.oDiv.style.top=t+'px';
    }
    </script>
    </head>
    <body>
    <div id="div1">
    </div>
    <div id="div2">
    </div>
    </body>
    </html>

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/jtjds/p/5256271.html
Copyright © 2011-2022 走看看