JS的this真是好難理解啊,求高手指點

2022-02-22 02:23:23 字數 1403 閱讀 8764

var a=5;
function test()
test();
new test();
在chrome上run了一下,結果是

0
5
0
0
undefined
0
前三個結果好說,但對於第五個結果undefined我很疑惑,關鍵的就是這一句:

alert(this.a);
我的理解是,當執行到new test()這一句的時候,this指向了test,那麼this.a應該就是

a=0;
這一句裡面的0啊!為什麼是undefined呢?求解答啊求解答!

--------------------------------分割線--------------------------------------

在除錯過程中我發現的幾點:

源**如下

執行test()之前,this指向domwindow物件:

執行test()之時(斷點位於test()內部),this仍然指向domwindow物件,輸出一次為0,5,0。

執行new test()之時(斷點位於test()內部),this指向了乙個test物件,但是這個物件沒用任何屬性或成員:

輸出依次為0,undefined,0

有的大哥說在test裡面寫

function test()
並不代表給test物件加了乙個a屬性,a只是乙個區域性變數,是這樣麼?

那麼如何給test加屬性呢?(使得第二次輸出為0,0,0而不是0,undefined,0呢)

才疏學淺,還望賜教!

--------------------------------分割線2--------------------------------------

有的大哥建議說把

a = 0;
改為

this.a=0;
執行結果是:

undefined
0
undefined
undefined
0
undefined
應該說這個結果還是可以理解的。

看來this.a和a確實不一樣啊。

mysql配置好難啊 mysql的配置經驗談

mysql的配置經驗談 今天想配個blog,遇到一些問題 也沒有看機器上帶不帶啊,就網上找了乙個mysql5,然後解開,因為我下的是靜態編譯好的版本,就不用再編譯安裝了 結果編譯php的時候提示mysql庫錯誤,開啟config.log一看,提示不相容。然後一看機器核心,原來是64位的機器。暈死 m...

虛擬主機的實現方式,真是簡單啊!

比如我有一台伺服器servera,它在全球資訊網上的的ip是125.111.111.111,我想在該伺服器上架設若干個不同網域名稱的 除了使用埠的方式外 使用埠不是太好,用埠時,網域名稱將會通過url 的方式來定位到你的 如果網域名稱服務商不允許隱藏真實ip的話,之後顯示的是ip而非網域名稱 還有乙...

win7的安全真是讓人蛋痛啊

每天坐地鐵都喜歡在乙個位置,因為下車時,有時能看到乙個女孩。雖然長得也平常,但天天見,難免有點說不明白的感情在裡面,對不。可是對win7,這是我人生頭一回這麼懷疑自己。怎麼用了一年,越看越不順眼呢?你說,程式設計師總是面對一件事,就是要編譯程式,任務變動,去年幹的活,被我挪走了,那個目錄加了幾個共享...