首先我們來宣告乙個js物件person:
var person =
};複製**
然後呼叫person物件的talk方法:
person.talk();
複製**
結果如下:
沒有任何問題,然後我們將person物件的talk方法賦值給乙個全域性變數talk,並呼叫這個全域性的talk方法:
var talk = person.talk;
talk();
複製**
結果如下:
和之前的執行結果相同。
現在我們來給person物件新增屬性name和方法sayname,修改之後的person物件如下:
var person = ,
sayname
() }
複製**
呼叫person物件的sayname方法:
person.sayname();
複製**
結果如下:
沒有任何問題,輸出的name是person物件的name屬性,然後我們將person物件的sayname方法賦值給乙個全域性變sayname,並呼叫這個全域性的sayname方法:
var sayname = person.sayname;
sayname();
複製**
結果如下:
我們發現此時沒有找到name,輸出undefined
,這是由於我們呼叫sayname方法時,是在全域性作用域下呼叫的該方法,對比一下:
//呼叫person物件的sayname方法:
person.sayname();
呼叫全域性的sayname函式,瀏覽器環境下相當於呼叫:
window.sayname();
複製**
而此時頂級物件window下並沒有name屬性,所以輸出undefined
。
我們再拓展一下,如果在定時器中使用this是指向什麼作用域呢?、 在person物件中新增乙個方法saynamelater,修改之後的person物件如下:
var person = ,
sayname
() ,
saynamelater
() ,1000);
}}複製**
呼叫person物件的saynamelater方法:
person.saynamelater();
複製**
結果如下:
我們發現此時沒有找到name,輸出undefined
,這是由於我們在使用定時器時,函式中的this會指向window物件(瀏覽器環境下),如果我們此時宣告全域性變數name並賦值:
var name = "xiaohong";
複製**
再呼叫person物件的saynamelater方法:
person.saynamelater();
複製**
結果如下:
使用定時器時,函式中的this會指向window物件,即使我們使用物件方法而不是函式,this依然會指向window物件。現在person物件不變,全域性變數name不變,在定時器中呼叫person物件的sayname方法:
var name = "xiaohong";
var person = ,
sayname
() ,
saynamelater
() ,1000);
}}settimeout(person.sayname, 1000);
複製**
結果如下:
可以看到使用的仍然是全域性變數name,這是由於計時器在解析第乙個引數的時候使用eval執行,相當於我們最開始說的,將函式的方法賦值給乙個變數,並執行該變數方法,所以作用域依然是全域性。
雜七雜八的
有一些常用的表示式的對應元 如下表 型別 元 注釋 注釋 array type comment value 注釋 注釋段 注釋第一行 注釋第二行 array type comments value 注釋第一行 注釋第二行 退出exit exit 200 array type exit array t...
C C 的雜七雜八
1.includebit stdc h是gcc中的乙個神奇的庫,它包含了幾乎所有的c 標準庫。2.templatevectorsplitstr const string s 這段 將s中以空格分隔的資料提取出來,以t型別儲存到vector中。istringstream 是以string作為buf,o...
雜七雜八的感受
關於一位大神的分享 1.不要忘記你的熱情 2.主動 主動 還是主動 3.今天不發生,明天也不會發生 4.有深度才會有廣度,廣度是深度的衍生品 5.如果你像大多數人一樣思維,你也會成為大多數人,如果你對此不介意,那也沒什麼問題 6.在你問問題前,請先搞明白你的問題的根源是什麼,你要解決什麼問題 關於職...