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