var MEvent = {
    nD: function(l7){
        return "_e__" + l7
    },
    gm: function(uy, l8){
        return function(lM){
            lM = ny(lM);
            l8.call(uy, lM)
        }
    }
......}
var MEvent={
......
}
是定义类吗,这种和直接用function定义类有什么区别?nD: function(l7){
......
}
是定义类的方法吗,和用this.nD = function (){......}有什么区别?如果有详细说明请附上。
还有上面的一段代码是我从javascript文件中直接copy过来的,请问上面红字部分的变量是不是经过混淆过,有什么办法可以还原吗?

解决方案 »

  1.   

    可以写个简单的js类
    function Class1()
    {
        var s="123";
        this.p=s;
        this.ShowString =function ()
    {
        alert(this.p);
    }
    }
    var c=new Class1()
    alert(c.p);
    c.ShowString();
      

  2.   

    var MEventA = { ...... }  是定义了一个对象, 这个对象里面有nD, gm 等方法
    var MEventB = function([args]) { ... } 可以用来定义一个类, 其实他也是对象
    MEventA 可以直接使用, MEventA.nD(...) 直接调用nD方法
    而 MEventB 要建立它的实例来使用, 如var meb = new MEventB(); meb.nD();
      

  3.   

    我觉着xiangtanboy好像是对的, 
    想再请问我问题中红色标识的变量是经过混淆或加密或其它处理的吗?有什么方法可以转化吗
      

  4.   

    类定义的三种方式之一,称为 JSON format(JSON 格式)。
      

  5.   

    请问 这个是什么意思parseInt(’ZZ’,36)值是多少和是怎么计算出来的?
      

  6.   

    红色标出来的就是普通的变量, 看不出来是不是被压缩或者混淆过. 至于表示什么意思,就要看上下文,和怎么使用的了.
    parseInt(expr, radix) 是把一个表达式expr转换成十进制整数, radix表示expr的进位数
    36进制下, z的十进制值是35, parseInt('ZZ',36) 的计算方法就是 35*36的1次方+35*36的0次方, 即35*36+35=1295
    2 ? 1 : 0是一个三元表达式(condition ? truepart : falsepart), 当 condition 能转换成布尔真值时, 表达式返回truepart, 否则返回falsepart.
    所以2 ? 1 : 0返回truepart, 结果为1
      

  7.   

    请问为什么2 ? 1 : 0结果是1?是表达式结果大于0就执行truepart吗?
      

  8.   

    与下面代码完全等效:if(2)
        return 1;
    else
        return 0;
      

  9.   

    因为2是个真值, 所以是执行truepart..大于0会执行truepart, 小于0也会truepart, 但是等于0就执行falsepart了
      

  10.   

    不好意思啊,把xiangtanboy给整晕了。还请看下面的代码
    var cq = {
        pu: {},
        vp: function(li){
            return this.pu[li] || function(pu, xT){
                var v6;
    ......
                    v6 = new Array();
    ......
                    pu[xT] = v6;
                    return v6
                }
                else {
                    ......
                    pu[xT] = v6;
                    return v6
                }
            }(this.pu, li)
    },
    ......
    }其中红色标出的pu应该是定义了一个空类,但是绿色标识的 pu又被当成了数组来使用,请问是什么特殊用法吗?
    还有类似this.pu,这种带 this的变量的使用范围是什么?是全局变量还是局部变量?谢谢
      

  11.   

    这个红pu不是一个类, 而是一个对象..绿色的pu也不是数组, 他就是那个红色的pu. pu[li]是从pu这个对象里面查找li这个成员
    this是指当前对象, 通常在对象的建立的时候使用,用来引用对象本身. 绿色的this.pu不是变量, 而是指cq这个对象的pu成员, 就是红色的那个对象
      

  12.   

    var cq = { 
        pu: {}, 
        vp: function(li){ 
            return this.pu[li] || function(pu, xT){ 
                var v6; 
    ...... 
                    v6 = new Array(); 
    ...... 
                    pu[xT] = v6; 
                    return v6 
                } 
                else { 
                    ...... 
                    pu[xT] = v6; 
                    return v6 
                } 
            }(this.pu, li) 
    }, 
    ...... 

    这种是用对象直接量(也称为对象初始化程序)创建的对象,javascript中的只要是{}对就是一个对象,比如:写个类
    function myClass()
    {}
    myClass.prototype=cq;
    这样,myClass就会包含对象cq中的所有属性和方法.
      

  13.   

    谢谢各位的回答,尤其是xiangtanboy,回答了我那么多问题,就10分了都给你吧。