首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Javascript This解决办法

2012-09-24 
Javascript ThisJScript codeSCRIPTvar ComUtil {com:www.baidu.com,getCom:function(){alert(this.

Javascript This

JScript code
<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>


究竟原理是什么?请高手指教。。

[解决办法]
不用想的那么复杂,更不要死扣什么定义,很好理解的
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成员



[解决办法]
<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...
[解决办法]
你直接alert一下this,看是什么类型的不就知道为什么了么。
[解决办法]
你#A那那个com 如果没有var 那他才属于window
有var 那他就是ShowCom的局部变量
[解决办法]

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

热点排行