JavaScript 我做的这个小类,怎么老出错?

这个就是调用 _this.arrNew[*] 的时候,就出错,请问怎么回事呢?

function ybLayer(layer)
{

//声明属性:

    var _this=this;    //子类中调用的父类简称;
    var arrNew = new Array();      //★★这个地方,应该就是问题所在,我不会改...

    var myConstruct=function ()    //模拟构造方法;

    {

        arr = layer.bounds;

        //alert(  arr );    //0 px,120 px,2736 px,1944 px

        for(var i in arr)
        {
            a = arr[i];    // 这个这个a ,是个 unitValueObject , 0 -> 0 px
            a = String(a);    //把unitValueObject转成String
            a = a.replace( " px" , "" ) ;    //处理
            a = parseInt( a );
            _this.arrNew[i] = a;    //★★★★★★★★★★★★就是这里,老出错..
        }


        _this.ybLeftTopX = _this.arrNew[0];
        _this.ybLeftTopY = _this.arrNew[1];
        _this.ybRightBottomX = _this.arrNew[2];
        _this.ybRightBottomY = _this.arrNew[3];
        _this.ybWidth = _this.arrNew[2]-_this.arrNew[0];
        _this.ybLength = _this.arrNew[3]-_this.arrNew[1];

    }

    myConstruct();
}
阅读 2.3k
2 个回答
function ybLayer(layer)
{

//声明属性:

    var _this=this;                // 子类中调用的父类简称(不太理解你的意思); 
                                   // 我的解释:new ybLayer(layer) 方式创建实例
                                   // 则这边的 this 存的就是 ybLayer 这个构造函数的实例;
                                   // 若是 ybLayer.call(obj , layer) 这种方式调用,
                                   // 那么 this = obj
    
    var arrNew = new Array();      //★★这个地方,应该就是问题所在,我不会改...
                                   // 实际上你这边不过就是创建了个局部变量
                                   // 然后你就想当然的以为 arrNew 好像就是 this 对象
                                   // 的属性一样,实际上并不是,如果要改,需改成这样:
                                   // _this.arrNew = new Array();

    var myConstruct=function ()    //模拟构造方法;

    {

        arr = layer.bounds;

        //alert(  arr );    //0 px,120 px,2736 px,1944 px

        for(var i in arr)
        {
            //--------------------------------------------------------------
            a = arr[i];    // 这个这个a ,是个 unitValueObject , 0 -> 0 px
            a = String(a);    //把unitValueObject转成String
            a = a.replace( " px" , "" ) ;    //处理
            a = parseInt( a );
            //----------------------------------------------------------------
            // 以上一连串的操作,可以简化成: a = parseInt(arr[i]) 一步就可以了
            // 具体的去查询 parseInt 这个函数的作用
            //----------------------------------------------------------------
            _this.arrNew[i] = a;    //★★★★★★★★★★★★就是这里,老出错..
                                    // 这里老是出错是因为,_this 这个对象本身没有
                                    // arrNew 这个属性,所以才出错,具体修改看上面
        }


        _this.ybLeftTopX = _this.arrNew[0];
        _this.ybLeftTopY = _this.arrNew[1];
        _this.ybRightBottomX = _this.arrNew[2];
        _this.ybRightBottomY = _this.arrNew[3];
        _this.ybWidth = _this.arrNew[2]-_this.arrNew[0];
        _this.ybLength = _this.arrNew[3]-_this.arrNew[1];

    }

    myConstruct();
}

_this.arrNew = new Array();
用其他语言的套路写js,显然不是正确的姿势。
之前那样写,aarrNew只是构造函数的一个局部变量,并没有成为返回对象的属性,所以会出错。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题