成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

幾個(gè)例子搞定javascript的this作用域

kevin / 3136人閱讀

摘要:但是有一個(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)用

這是函數(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
作為對(duì)象方法的調(diào)用

函數(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ù)調(diào)用

所謂構(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

相關(guān)文章

  • 一次搞定this和閉包

    摘要:他的組成如下對(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í)行上下文...

    Airy 評(píng)論0 收藏0
  • 輕松搞定javascriptthis指向

    摘要:調(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ù)的...

    shinezejian 評(píng)論0 收藏0
  • 深入理解JavaScript,這一篇就夠了

    摘要:也就是說,所有的函數(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 是非常有感情的,畢...

    villainhr 評(píng)論0 收藏0
  • 你需要知道面試中10個(gè)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)的大漠窮...

    YacaToy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<