<SCRIPT>
var ComUtil = {
com:'www.baidu.com',
getCom:function(){
alert(this.com);
}
}


com = 'www.sina.com';

function ShowCom(){    
var myGetCom = ComUtil.getCom; 
myGetCom(); 
}  
ShowCom();// 最后结果是:www.sina.com</SCRIPT>//网上的说法:临时(局部)变量是属于window对象的——只不过外界不能直接引用,只对Javascript引擎可见
//所以最后alert是www.sina.com就可以解释了,但是按照遮掩逻辑,下面的例子又想不通了
//按照这种说法推断:下面程序alert的时候同样也会去找window.com,
//由于window没有com,但是在#A处定义了一个局部变量,更具上面的说法,则这个局部变量时属于window的
//所以window.com应该是www.google.com,但是实际上的结果是undefined<SCRIPT>
var ComUtil = {
com:'www.baidu.com',
getCom:function(){
alert(this.com);
}
}

function ShowCom(){       // 保存getCookie函数到一个局部变量,因为下面会经常用到 
var com = "www.google.com"; // #A
var myGetCom = ComUtil.getCom;
myGetCom(); 
}  
ShowCom();// 最后结果是:undefined

</SCRIPT>究竟原理是什么?请高手指教。。

解决方案 »

  1.   

    不用想的那么复杂,更不要死扣什么定义,很好理解的
    this只代的是函数的调用者,或者说调用时函数所属的对象
    com = 'www.sina.com'; 
        function ShowCom(){    
        var myGetCom = ComUtil.getCom; //不要被这儿误导,直接把函数体代进来进行了,与其原对象无关
        myGetCom(); //此处调用函数,在全局调用的(this所在函数不是任何对象的方法),调用时this指代window
        }  
        ShowCom();// this指代window,返回的结果是window.com
        function ShowCom(){       //  
        var com = "www.google.com"; // #A
        var myGetCom = ComUtil.getCom;//这个com仅仅是函数ShowCom的内部成员,不具有全局性,所以不是window的成员
        myGetCom(); 
        }  
        ShowCom();// 最后结果是:undefined;理所当然的,上面已经说了this指代window,window没有定义com成员
      

  2.   

    <SCRIPT>
        var ComUtil = {
            com:'www.baidu.com',
            getCom:function(){
                alert(this.com);
            }
        }
        
        
        com = 'www.sina.com';
        
        function ShowCom(){    
        var myGetCom = ComUtil.getCom; 
        myGetCom(); 
        }  
        ShowCom();// 最后结果是:www.sina.com</SCRIPT>
    因为函数的作用域是全局的。
    所以this 是指向window。
    因此this.com 指向的就是全局变量com ="www.sina.com"
    第2段代码解释也是一样!
    因为全局作用域下没有com变量
    所以undefined...
      

  3.   

    你直接alert一下this,看是什么类型的不就知道为什么了么。
      

  4.   

    你#A那那个com 如果没有var 那他才属于window
    有var 那他就是ShowCom的局部变量
      

  5.   

      
        var myGetCom = ComUtil.getCom; 
        myGetCom(); 
        =
        function(){
           alert(this.com);
        }
       把上面的代码拷到showCom方法里面去执行你就发现问题在哪了