關於這個this關鍵字,也是很多專案中常常被用到的,那麼,有人也許會問,幹嘛要用this呢,在函式被呼叫時,直接指明是什麼物件在呼叫不就行了?還整那麼個模模糊糊的概念出來幹嘛?不過嘛,存在即真理,既然有這麼個東西,那也就有他存在的意義,下面來看看吧。
首先,我們要先回憶一下js函式都有哪幾種呼叫的場合,有如下幾種場合:
1、很常規的呼叫(即直接呼叫,其實你發現也是全域性呼叫);
2、作為某個物件的豆哥方法被呼叫;
3、作為建構函式,用來新建某個新物件(object);
一、純粹的函式呼叫
這是函式的最通常用法,屬於全域性性呼叫,因此this就代表全域性物件global,那麼這裡global很多人又很迷惑了,實則在瀏覽器環境下,global也即是window物件,global物件是單體內建物件,即不依賴宿主環境的物件,而window物件依賴瀏覽器。
看下面這段**:
function test();
person .name= "dearxiangxiao";
person.profession = "projector";
person.interduce= test;
person .interduce(); // my name is dearxiangxiao,and my profession is projector
這裡很好理解,既然是person在呼叫test函式,那麼理所應當的this指向的是person實體,也就是前面說的呼叫函式的上一級物件,它的name和profession 屬性當然應該被讀取出來了。
三、作為構造函式呼叫
所謂建構函式,就是通過這個函式生成乙個新物件(object)。這時,this就指這個新物件,也來看一段**,將一中的例子做輕微的修改:
var name = "xiangxiao";
function person(){
this.name = "dearxiangxiao";
var person1 = new person();
console.log(name); // xiangxiao
console.log(person1.name); // dearxiangxiao
可以看出,this指向的物件是剛剛新建的person1,讀取出了它的名稱dearxiangxiao,而直接列印name變數,值仍然未變,為之前的xiangxiao。這更加表明this指向person1,而不是global物件。
下面還是來看個例子吧,這裡把三中的例子做一些輕微的修改:
var name = "xiangxiao";
function test(){
console.log(this.name);
var person1 = new person();
person1.name = "dearxiangxiao";
person1.interduce = test;
這篇博文就是這麼多內容了,希望大家會喜歡。
js中的this關鍵字
普通函式 window functionfn fn window 事件函式 指向事件源 var btn document.queryselector button btn.onclick function 定時器 中也是window setinterval function 1000 預保留this...
JS中的this關鍵字
js中的this代表的是當前行為執行的主體 js中的context代表的是當前行為執行的環境 區域 this是誰和函式在哪定義的和在哪執行的都沒有任何的關係,這和它的執行主體有關。function fn var obj fn window obj.fn obj function sum sum wi...
js函式的return關鍵字
return關鍵字 函式體內使用。return特性 在函式中,只要遇到了return關鍵字,表示函式執行結束,會立即跳出函式執行。所以乙個函式中,無論有多少個return,只會執行第乙個return,因為後面的就不再執行了。也因此,函式有乙個特點 只有乙個返回值,全域性返回 接收這個值。functi...