摘要:但是有一個總的原則,那就是指的是,調(diào)用函數(shù)的那個對象。純粹的函數(shù)調(diào)用這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此就代表全局對象此時的是作為對象方法的調(diào)用函數(shù)還可以作為某個對象的方法調(diào)用,這時就指這個上級對象。
函數(shù)this的用法
his是Javascript語言的一個關鍵字。
它代表函數(shù)運行時,自動生成的一個內(nèi)部對象,只能在函數(shù)內(nèi)部使用。比如
function test(){ this.x = 1; }
隨著函數(shù)使用場合的不同,this的值會發(fā)生變化。但是有一個總的原則,那就是this指的是,調(diào)用函數(shù)的那個對象。
這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此this就代表全局對象Global
function test(){ this.x = 1; alert(this.x); } test(); // 1 此時的this是window
var x = 1; function test(){ alert(this.x); } test(); // 1
函數(shù)還可以作為某個對象的方法調(diào)用,這時this就指這個上級對象。
function test(){ alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m(); // 1
所謂構造函數(shù),就是通過這個函數(shù)生成一個新對象(object)。這時,this就指這個新對象。
function test(){ this.x = 1; } var o = new test(); alert(o.x); // 1
var x = 2; function test(){ this.x = 1; } var o = new test(); alert(x); //2 alert(o.x); //1函數(shù)的arguments
arguments屬性是正在執(zhí)行的函數(shù)的內(nèi)置屬性,返回該函數(shù)的arguments對象。arguments對象包含了調(diào)用該函數(shù)時所傳入的實際參數(shù)信息(參數(shù)個數(shù)、參數(shù)值等)。
只有在當前函數(shù)正在執(zhí)行時該屬性才有效。
arguments屬性的值為Object類型,返回正在執(zhí)行的當前函數(shù)的arguments對象。
arguments對象包含調(diào)用該函數(shù)時所傳入的實際參數(shù)信息,例如:參數(shù)的個數(shù)和參數(shù)的值。我們可以通過arguments屬性讓函數(shù)處理可變數(shù)量的參數(shù)。
arguments對象有以下三個屬性:
length屬性,返回實際傳入的參數(shù)個數(shù)。
callee屬性,返回當前函數(shù)的引用(匿名函數(shù)可以使用該屬性實現(xiàn)遞歸調(diào)用)。
0...n屬性,以順序索引訪問傳入的具體參數(shù)。例如,使用arguments[0]可以訪問傳入的第1個參數(shù)。
function test(){ document.writeln("實際傳入的參數(shù)個數(shù):" + arguments.length); // 實際傳入的參數(shù)個數(shù):3 for(var i = 0; i < arguments.length; i++){ document.writeln("傳入的第" + (i + 1) +"個參數(shù):" + arguments[i]); } // 傳入的第1個參數(shù):1 傳入的第2個參數(shù):張三 傳入的第3個參數(shù):true // callee屬性返回的就是當前函數(shù) document.writeln( arguments.callee === test ); // true }; test(1, "張三", true);函數(shù)的call
call()函數(shù)用于調(diào)用當前函數(shù),并可同時使用指定對象thisObj作為本次執(zhí)行時函數(shù)內(nèi)部的this指針引用。
就是說fn.call(a1),是fn函數(shù)中的this指向a1
call()函數(shù)是將Function對象的參數(shù)一個個分別傳入
function foo(a, b){ document.writeln(this.name); document.writeln(a); document.writeln(b); } // 改變this引用為obj,同時傳遞兩個參數(shù) foo.call(obj, 12, true); // 李四 12 true function bar(a, b){ var o = {name: "王五"}; // 調(diào)用foo()函數(shù),并改變其this為對象o,傳入?yún)?shù)a,b作為其參數(shù) foo.call(o, a, b); } bar("CodePlayer", "www.365mini.com"); // 王五 CodePlayer www.365mini.com函數(shù)的apply
使用方法和作用與call()一樣
注意apply()的參數(shù)必須是一個數(shù)組,或者arguments對象
function foo(a, b){ document.writeln(this.name); document.writeln(a); document.writeln(b); } // 改變this引用為obj,同時傳遞兩個參數(shù) foo.apply(obj, [12, true]); // 李四 12 true function bar(){ var o = {name: "王五"}; // 調(diào)用foo()函數(shù),并改變其this為對象o,傳入當前函數(shù)的參數(shù)對象arguments作為其參數(shù) foo.apply(o, arguments); } bar("CodePlayer", "www.365mini.com"); // 王五 CodePlayer www.365mini.com參考資料
javascript手冊
this作用域
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91290.html
摘要:他的組成如下對的就是你關注的那個變量對象作用域鏈跟閉包相關由于是單線程的,一次只能發(fā)生一件事情,其他事情會放在指定上下文棧中排隊。 閉包和this,是兩個相當高頻的考點,然而你有沒有想過,實際上他們兩個都跟同一個知識點相關? 有請我們的這篇文章的主角,執(zhí)行上下文 執(zhí)行上下文 執(zhí)行上下文是什么 可以簡單理解執(zhí)行上下文是js代碼執(zhí)行的環(huán)境,當js執(zhí)行一段可執(zhí)行代碼時,會創(chuàng)建對應的執(zhí)行上下文...
摘要:調(diào)用在中,通過的形式調(diào)用一個構造函數(shù),會創(chuàng)建這個構造函數(shù)實例,而這個實例的指向創(chuàng)建的這個實例。如下例所示,在構造函數(shù)內(nèi)部使用并沒有改變?nèi)肿兞康闹怠o@然,箭頭函數(shù)是不能用來做構造函數(shù)。 關于javascript中this指向的問題,現(xiàn)總結如下,如有不正確,歡迎指正。 javascript中,this的指向并不是在函數(shù)定義的時候確定的,而是在其被調(diào)用的時候確定的。也就是說,函數(shù)的...
摘要:也就是說,所有的函數(shù)和構造函數(shù)都是由生成,包括本身。如果只考慮構造函數(shù)和及其關聯(lián)的原型對象,在不解決懸念的情況下,圖形是這樣的可以看到,每一個構造函數(shù)和它關聯(lián)的原型對象構成一個環(huán),而且每一個構造函數(shù)的屬性無所指。 前言 JavaScript 是我接觸到的第二門編程語言,第一門是 C 語言。然后才是 C++、Java 還有其它一些什么。所以我對 JavaScript 是非常有感情的,畢...
摘要:自我學習目前有成千上萬的年輕人在學習和開發(fā),希望獲得一份工作。知道的綁定規(guī)則。知道和原型屬性是什么以及它們的作用。高階函數(shù)了解函數(shù)是中的一級對象,這意味著什么知道從另一個函數(shù)返回函數(shù)是完全合法的。了解閉包和高階函數(shù)允許我們使用的情況。 翻譯原文出處:10 JavaScript concepts you need to know for interviews 之前不是鬧得沸沸揚揚的大漠窮...
閱讀 2966·2021-11-11 16:55
閱讀 528·2021-09-27 13:36
閱讀 1103·2021-09-22 15:35
閱讀 2925·2019-08-30 12:46
閱讀 3136·2019-08-26 17:02
閱讀 1837·2019-08-26 11:56
閱讀 1303·2019-08-26 11:47
閱讀 434·2019-08-23 17:01