var outCount = 0;
function ClassA()
{
var inCount = 0;
this.myFun = function()
{
alert( outCount + "  " + inCount );
++outCount;
++inCount;
}
}
ClassA.call(ClassA);
window.ClassA.myFun(); var aaaa = new ClassA();
aaaa.myFun(); 代码先输出“0  0”,再输出“1  0”。 问题1:ClassA是一个“类”,还是一个“函数”,为什么声明的时候用一个“function”关键字; 问题2:为什么两次输出的 inCount 都是 0 ?我本以为应该先是 0 , 再是 1 ; 问题3:ClassA.call(ClassA);是什么意思?有人说“call”用于继承,有人说用于改变 this 指针……

解决方案 »

  1.   

    为什么人们总是喜欢用 ++count, 怎么不用count++, 前者的可读性简直糟糕之极。
      

  2.   

    问题1:ClassA是一个“类”,还是一个“函数”,为什么声明的时候用一个“function”关键字;js里声明的方法用function,而在js中function也等同对象问题3:ClassA.call(ClassA);是什么意思?有人说“call”用于继承,有人说用于改变 this 指针……两种说法都对,要看在什么情况下了
      

  3.   

    至于第二个,那是因为两种调用方式根本就不是针对同一个对象来的,第一个是用window属性调用的,而第二个是用对象本事实例化调用的,而outcount因为是全局变量所以不受限制
      

  4.   


    我最不明白的还是第一种调用方式:    ClassA.call(ClassA);
        window.ClassA.myFun();首先,call 是用来干嘛的?其次,这里调用的 myFun() 是属于哪个对象的?是不是说,这有一个属于 window 的 ClassA 匿名对象
      

  5.   

    new this call
    几个关键字 好好去网上搜索看看具体说明 和理解下意思
    这几个 东西 光靠一点点回复 是看不懂的
      

  6.   

    ClassA.call(ClassA)是为ClassA添加myFun()的属性。
    这一句会执行function ClassA(), 其中的this由ClassA对象替换,即:ClassA.myFun=function(){...},从而实现为ClassA添加myFun()的属性。
    如果没有这一句,直接写ClassA.myFun()是undefined.
    而function ClassA(){...}中的this.myFun() = function(){...}是为对象的实例添加属性。
    例如:var aaaa = new ClassA(); aaaa.myFun();
     
      

  7.   

    问题1:ClassA是一个“类”,还是一个“函数”,为什么声明的时候用一个“function”关键字;JS里的function可以定义对象类,JS自定义的对象可以分为对象类和对象实例,function ClassA()是定义的对象类,new ClassA()是定义的对象实例。问题2:为什么两次输出的 inCount 都是 0 ?我本以为应该先是 0 , 再是 1 ;第一次的输出是window.ClassA.myFun()的输出,outCount和inCount都是0;第二次输出是aaaa.myFun()的输出,是重新定义的对象实例,因为outCount是全局变量,所以值不变,而inCount是对象实例中重新分配的变量,所以是function ClassA()中设定的初始值。问题3:ClassA.call(ClassA);是什么意思?有人说“call”用于继承,有人说用于改变 this 指针……call方法可以将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象,也就是改变this指针问新的对象,把原来指向对象的方法赋给新指向的对象。你这里的调用好像没什么用,感觉不太清楚……
      

  8.   


    噢~ 就是说要对直接从类调用方法必须先用call方法添加么?
      

  9.   

    var o = {};
    function func()
    {
        this.myFun = function()
        {
            alert("x")
        }
    }func.call(o);
    o.myFun()
    //-----------------------------
    var o = {};
    o.func = function()
    {
        this.myFun = function()
        {
             alert("x");
        }
    }o.func()
    o.myFun()
    其实就相当于这样
      

  10.   

    可以用call,但是不一定,也可以直接写ClassA.myFun = function(){...};
    call是Function的prototype中的,假如有一个function ClassA(){
        this.a = function(){...}; this.b = function(){...}; this.c = function(){...}
    }
    如果用ClassA.call(obj),可以为obj添加多个属性