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