js中的this和函式的呼叫

2021-08-08 04:03:28 字數 2372 閱讀 1861

this是乙個關鍵字,指向呼叫該方法的物件。

this是在執行環境上下文中被指定好的,也就是在乙個函式呼叫但是還沒有開始執行的時候設定好的。它和作用域在函式宣告的時候公共部分就設定好了不一樣,它是看,當這個函式作為某個物件的方法呼叫時,誰呼叫了它,它就指誰。它取決於誰呼叫了它

在js權威指南中,函式的呼叫分為四種情況:

這種純粹的函式呼叫,通常指的環境是全域性,this指向的是window(非嚴格模式),或者undefined(嚴格模式)。以下寫的都是非嚴格模式下的結果:

和變數不同,關鍵字this沒有作用域的限制,巢狀的函式不會從呼叫它的函式中繼承this,如果巢狀函式作為函式呼叫,其this值不是全域性物件就是undefined。

var a = 0;

function

test

() test();

function test,雖然實際上是作為了window這個物件的乙個方法,相當於window.test();

function

test

() ;

func();

}test();

函式add賦值給了func,此時的func也是函式型別,內容也就是賦值=後那一串。

func();其實也就是(function add())();

所以這裡,還是通過通過的函式呼叫,所以這裡的this也仍然是window。

在中看到這個例子也是類似的,也想了一會才明白:

var point = ; 

// 內部函式

var movey = function

(y) ;

movex(x);

movey(y);

} }; point.moveto(1, 1); //呼叫函式moveto

point.x; //==>0

point.y; //==>0

x; //==>1

y; //==>1

這時候如果不希望這兩個movex,movey的this指向全域性,可以使用that,詳細見上述位址。

下面又是另一種情況,函式做為了其他物件的方法來呼叫:

var test = }};

window.test.b.fn();

那麼,這個時候又有乙個問題,呼叫的物件又是指向誰呢?是window,還是test,還是b。

在函式中,彈出c的值是7,證明this訪問的是b中的內容,所以呼叫函式的物件它設定的是b。

注釋掉c:7,會發現會彈出undefined。

個人看到很多部落格後得出乙個結論:作為方法呼叫時,它的this指向的是呼叫它的最近的那乙個物件

如果函式或者方法呼叫之前帶有new關鍵字,它就構成構造函式呼叫

先了解一下new這個關鍵字來呼叫建構函式會發生什麼實際的步驟:

1)建立乙個新物件

2)將建構函式的作用域賦給新物件(因此this就指向了這個新物件

3)執行建構函式中的**(為這個新物件新增屬性)

4)返回新物件

先分析一下底下這個new:

function

person

() var a = new person();//沒有引數的話其實這對括號可以省略

alert(a.name);//zhuyi

1)建立了乙個新的空物件,比方我給這個空物件取名叫tmp(這個名字不存在,只是為了便於看…)

2)將person的作用域賦給tmp,也就是把this指向了tmp

3)執行person中的**,這裡就是給tmp新增了name屬性

4)返回這個物件,然後這裡賦給了a

於是最後這一系列過程後,a就有了name屬性,也能alert出來了。

var o = {};

function

person

() // person.call(o);

alert(o.name);//undefined

var o = {};

var name = "l";

function

person

() o.test = person;//新建乙個物件o,給它的方法test設定為person這個函式

//注釋下一行後,刪除上行注釋,結果彈出l

o.test();//undefined

js 函式的呼叫

function jc n else 此處也就是函式jc n var result jc 10 方法一 函式名 實參列表 console.log result function foo a,b,c foo 1,2,3 foo.call 1,2,3 方法二 函式名.call 執行環境物件,實參列表 此...

js函式的呼叫

一 函式 1.輸入兩個,再輸入運算子,得到結果 view code 自定義函式 view code 2.如果其他的檔案需要使用函式怎麼做?myfunction.jsp function jisuan num1,num2,operaor else return result view code htm...

js函式的呼叫

j ascript函式有四種呼叫方法,每種方式的不同在於this的初始化。1 作為乙個函式呼叫,預設為全域性物件。this的值為全域性物件 在 html 中預設的全域性物件是 html 頁面本身,所以函式是屬於 html 頁面。在瀏覽器中的頁面物件是瀏覽器視窗 window 物件 以上函式會自動變為...