Javascript 陷阱 window全域對象

來源:互聯網
上載者:User

function Test(){
this.name='Test';
var name=2;
this.show=function(){
alert(name);
alert(this.name);//顯示名字
}
}
var test=new Test();//通過構造器建立一個對象
test.show();//輸出2和'Test' ,說明對象方法訪問其屬性時必須加this.

function Test2(){
this.name='Test2';
this.show=function(){
alert(name);
alert(this.name);
}
}
Test();//直接調用Test();
var test2=new Test2();
test2.show();//輸出了Test,Test2,很奇怪啊,name問什麼有值了,而且怎麼會是'Test',bug?
alert(name);
window.show(); //輸出2,test;怎麼會有show函數呢,難道是bug

//依次輸出2,Test;Test,Test2;Test;2,Test

// ff和ie6下都是同樣的運行結果,看來不是bug,那究竟是為什麼呢?
// 注意到:對象方法訪問其對象的屬性時|必須|加以this.(和java不一樣).
// 整個頁面是預設的是|window|對象,那麼定義的函數,預設就是window對象的方法。
//直接直接調用函數時,相當於通過window.調用方法,那麼方法內部的this自然就是\
//window對象,this.name='Test'就是為window對象加了一個屬性.
// 那麼當方法局部範圍內未定義name且調用alert(name),就相當於調用alert(window.name);
/*啊,代碼混亂了。這看起來像一個很嚴重的陷阱!!*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.