jsx - JavaScript 我做的这个小类,怎么老出错?
阿神
阿神 2017-04-11 10:57:02
[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)
天蓬老师
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();
}
ringa_lee

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号