• js编程中遇到的问题


    javaScript是一种弱类型编程语言,所以在利用它大规模编程的时候,如果因为某些设计或操作失误出错,查找调试是一个比较痛苦的事情。

    我在利用canvas做游戏的时候,主要有如下几个问题。

    1.this

    利用js写基于(类似)oop的代码,于是乎在一个"类"里面离不开this , 但是js的类或者对象里的this有时候不怎么听话(我现在也没弄明白为什么)。例如你在一个js类里面的一个方法(函数)里调用这个类的实例变量或者方法,就需要用到 this.name或this.getName(),但是有的时候这个this失效了(我没有在方法中创建方法),一失效,程序就不能正常执行,但这个错误不符合基本的编程规则,找起来也不好找。最后,我干脆在类里面建立一个临时变量,这样写: var _this = this;

    当我需要使用this的时候,我直接使用_this,例如: _this.name或_this.getName();,这样就保证我不会出错。

    2. 继承

    继承举例

     /*    

    本类作为所有显示对象的基类    
    */
    function DispObject(){
        
        this.x = 0;
        this.y = 0;
        //
        this.width = 0;
        this.height = 0;
        // 是否可见
        this.visible = true;
        // 混合模式
        this.blendMode = "";    
        //
        this.alpha = 1.0;
        
        // 坐标转化: 从父级到子级
        this.parentToLocal = function(px,py){
            return {x:px - this.x,y:py - this.y};
        }
        // 坐标转化: 从子级到父级
        this.localToParent = function(px,py){
            return {x:px + this.x,y:py + this.y};
        }
    };
    //
    //
    RectShape.prototype = new DispObject();
    RectShape.prototype.constructor = RectShape;

    function RectShape(w,h){
        if(w == undefined || w == null){
            w = 0;
        }
        if(h == undefined || h == null){
            h = 0;
        }    
    };

    js中的oop是通过原型模拟的,所以在这里使用继承,你得小心。 如果一个类不会有子类,也就不会有继承,你随便 用new来产生实例是没问题的。当一个类需要被多次继承,以拓展工用,这时候你得类设计就得小心,而且在子类中创建实例如果只使用new 就很可能出错,错误的表现为(很可能是子类和父类使用同一份数据,或者多个实例会使用同一份数据) 。原因在于原型。过程是这样的,当你建立一个类的时候,你不可能全部是公开的方法或者属性(通过this.xx来定义),你需要一些私有的变量或方法,私有的变量或方法只能是临时(局部)变量或方法,在类中通过: var name = "vily";或 function init(){};来定义。当你的父类中有私用的东西的时候,你用new来创建子类,这很可能造成了,这两个实例共享这些私有数据。于是就出现错误。

    解决方案是你不能用new来创建,你需要用一个方法来生成,例如

    function createMovieClip(mc){
    MovieClip.prototype = new DispContainer();
    var pmc = new MovieClip();
    if(mc!= undefined && mc!= null){
    pmc.setBody(mc);
    }
    return pmc;
    };

    3.数组越界:

     数组越界是编程中的魔咒,很难摆脱。js的调试不方便性, 让这件事情变得更神秘。反正出错了就显示不正常。哈哈哈。这种逻辑相关的错误,要从逻辑设计的角度来找问题出现的可能点。

  • 相关阅读:
    【使用intellij idea14创建多Module工程---马房山网 www.mafangshan.com】
    【Zookeeper可以干什么】
    【Zookeeper是什么】
    【win10 intelij terminal 无法输入命令】
    【Information:java: javacTask: 源发行版 1.7 需要目标发行版 1.7】
    【如何用Maven创建web项目】
    【JS关键字】
    【在网页中添加滚动文字】
    【idea自动生成serialVersionUID】
    线段树扫描线求矩形面积交
  • 原文地址:https://www.cnblogs.com/vilyLei/p/2378182.html
Copyright © 2020-2023  润新知