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 物件 以上函式會自動變為...