Javascript 陷阱 window全局對(duì)象
更新時(shí)間:2008年11月26日 12:31:22 作者:
ff和ie6下都是同樣的運(yùn)行結(jié)果,看來不是bug,那究竟是為什么呢?
注意到:對(duì)象方法訪問其對(duì)象的屬性時(shí)|必須|加以this.(和java不一樣).
function Test(){
this.name='Test';
var name=2;
this.show=function(){
alert(name);
alert(this.name);//顯示名字
}
}
var test=new Test();//通過構(gòu)造器創(chuàng)建一個(gè)對(duì)象
test.show();//輸出2和'Test' ,說明對(duì)象方法訪問其屬性時(shí)必須加this.
function Test2(){
this.name='Test2';
this.show=function(){
alert(name);
alert(this.name);
}
}
Test();//直接調(diào)用Test();
var test2=new Test2();
test2.show();//輸出了Test,Test2,很奇怪啊,name問什么有值了,而且怎么會(huì)是'Test',bug?
alert(name);
window.show(); //輸出2,test;怎么會(huì)有show函數(shù)呢,難道是bug
//依次輸出2,Test;Test,Test2;Test;2,Test
// ff和ie6下都是同樣的運(yùn)行結(jié)果,看來不是bug,那究竟是為什么呢?
// 注意到:對(duì)象方法訪問其對(duì)象的屬性時(shí)|必須|加以this.(和java不一樣).
// 整個(gè)頁面是默認(rèn)的是|window|對(duì)象,那么定義的函數(shù),默認(rèn)就是window對(duì)象的方法。
//直接直接調(diào)用函數(shù)時(shí),相當(dāng)于通過window.調(diào)用方法,那么方法內(nèi)部的this自然就是\
//window對(duì)象,this.name='Test'就是為window對(duì)象加了一個(gè)屬性.
// 那么當(dāng)方法局部作用域內(nèi)未定義name且調(diào)用alert(name),就相當(dāng)于調(diào)用alert(window.name);
/*啊,代碼混亂了。這看起來像一個(gè)很嚴(yán)重的陷阱?。?/
this.name='Test';
var name=2;
this.show=function(){
alert(name);
alert(this.name);//顯示名字
}
}
var test=new Test();//通過構(gòu)造器創(chuàng)建一個(gè)對(duì)象
test.show();//輸出2和'Test' ,說明對(duì)象方法訪問其屬性時(shí)必須加this.
function Test2(){
this.name='Test2';
this.show=function(){
alert(name);
alert(this.name);
}
}
Test();//直接調(diào)用Test();
var test2=new Test2();
test2.show();//輸出了Test,Test2,很奇怪啊,name問什么有值了,而且怎么會(huì)是'Test',bug?
alert(name);
window.show(); //輸出2,test;怎么會(huì)有show函數(shù)呢,難道是bug
//依次輸出2,Test;Test,Test2;Test;2,Test
// ff和ie6下都是同樣的運(yùn)行結(jié)果,看來不是bug,那究竟是為什么呢?
// 注意到:對(duì)象方法訪問其對(duì)象的屬性時(shí)|必須|加以this.(和java不一樣).
// 整個(gè)頁面是默認(rèn)的是|window|對(duì)象,那么定義的函數(shù),默認(rèn)就是window對(duì)象的方法。
//直接直接調(diào)用函數(shù)時(shí),相當(dāng)于通過window.調(diào)用方法,那么方法內(nèi)部的this自然就是\
//window對(duì)象,this.name='Test'就是為window對(duì)象加了一個(gè)屬性.
// 那么當(dāng)方法局部作用域內(nèi)未定義name且調(diào)用alert(name),就相當(dāng)于調(diào)用alert(window.name);
/*啊,代碼混亂了。這看起來像一個(gè)很嚴(yán)重的陷阱?。?/
您可能感興趣的文章:
- JavaScript中for..in循環(huán)陷阱介紹
- 比較搞笑的js陷阱題
- JavaScript性能陷阱小結(jié)(附實(shí)例說明)
- JavaScript 存在陷阱 刪除某一區(qū)域所有節(jié)點(diǎn)
- 幫助避免錯(cuò)誤的Javascript陷阱清單
- 錯(cuò)誤剖析之JavaScript的9個(gè)陷阱及評(píng)點(diǎn)
- JavaScript的9個(gè)陷阱及評(píng)點(diǎn)分析
- JavaScript中常見陷阱小結(jié)
- 在JavaScript中遭遇級(jí)聯(lián)表達(dá)式陷阱
- JavaScript中常見的八個(gè)陷阱總結(jié)
相關(guān)文章
JavaScript利用時(shí)間分片實(shí)現(xiàn)高性能渲染數(shù)據(jù)詳解
為了豐富我們的知識(shí)體系,我們有必要了解并清楚當(dāng)遇到大量數(shù)據(jù)時(shí),如何才能在不卡主頁面的情況下渲染數(shù)據(jù),以及其中背后的原理,本文介紹了如何使用時(shí)間分片的方式來渲染大量數(shù)據(jù),感興趣的可以了解下2023-05-05
javascript控制swfObject應(yīng)用介紹
本文將詳細(xì)介紹js控制swfObject的實(shí)現(xiàn)方法,需要了解的朋友可以參考下2012-11-11
微信小程序滑動(dòng)選擇器的實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序滑動(dòng)選擇器的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
layui框架table 數(shù)據(jù)表格的方法級(jí)渲染詳解
今天小編就為大家分享一篇layui框架table 數(shù)據(jù)表格的方法級(jí)渲染詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
PixiJS學(xué)習(xí)之如何實(shí)現(xiàn)文字的繪制
PixiJS是一個(gè)開源的基于web的渲染系統(tǒng),為游戲、數(shù)據(jù)可視化和其他圖形密集型項(xiàng)目提供了極快的性能。這篇文章主要帶大家學(xué)習(xí)一下PixiJS是如何實(shí)現(xiàn)文字繪制的,希望對(duì)大家有所幫助2023-02-02
JavaScript實(shí)現(xiàn)微信紅包算法及問題解決方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)微信紅包算法及遇到的問題解決方法,需要的朋友可以參考下2018-04-04
JavaScript無縫滾動(dòng)效果的實(shí)例代碼
本文給大家分享一段實(shí)例代碼有關(guān)js實(shí)現(xiàn)無縫滾動(dòng)效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-03-03

