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

資訊專欄INFORMATION COLUMN

關(guān)于Javascript中apply、call、bind方法說明

mrcode / 2370人閱讀

摘要:需要注意的是,指定的值并不一定是該函數(shù)執(zhí)行時真正的值,如果這個函數(shù)處于非嚴(yán)格模式下,則指定為或時會自動指向全局對象瀏覽器中就是對象,同時值為原始值數(shù)字,字符串,布爾值的會指向該原始值的自動包裝對象。

JavaScript函數(shù)存在「定義時上下文」和「運(yùn)行時上下文」以及「上下文是可以改變的」這樣的概念

apply和call函數(shù)

call() 和 apply()都是為了改變某個函數(shù)運(yùn)行時的上下文(context)而存在的,換句話說,就是為了改變函數(shù)體內(nèi)部 this 的指向

call()方法接受的是一個參數(shù)列表,而apply()方法接受的是一個包含多個參數(shù)的數(shù)組(或類數(shù)組對象)

    fun.apply(thisArg[, argsArray])
    參數(shù):
        thisArg
            在 fun 函數(shù)運(yùn)行時指定的 this 值。需要注意的是,指定的 this 值并不一定是該函數(shù)執(zhí)行時真正的 this 值,如果這個函數(shù)處于非嚴(yán)格模式下,則指定為 null 或 undefined 時會自動指向全局對象(瀏覽器中就是window對象),同時值為原始值(數(shù)字,字符串,布爾值)的 this 會指向該原始值的自動包裝對象。
        argsArray
            一個數(shù)組或者類數(shù)組對象,其中的數(shù)組元素將作為多帶帶的參數(shù)傳給 fun 函數(shù)。如果該參數(shù)的值為null 或 undefined,則表示不需要傳入任何參數(shù)。從ECMAScript 5 開始可以使用類數(shù)組對象。瀏覽器兼容性請參閱本文底部內(nèi)容。

    fun.call(thisArg[, arg1[, arg2[, ...]]])
    參數(shù):
        thisArg
            在fun函數(shù)運(yùn)行時指定的this值。需要注意的是,指定的this值并不一定是該函數(shù)執(zhí)行時真正的this值,如果這個函數(shù)處于非嚴(yán)格模式下,則指定為null和undefined的this值會自動指向全局對象(瀏覽器中就是window對象),同時值為原始值(數(shù)字,字符串,布爾值)的this會指向該原始值的自動包裝對象。
            
        arg1, arg2, ...
            指定的參數(shù)列表
            
            
function a(xx, yy) {    
    alert(xx, yy);    
    alert(this);    
    alert(arguments);
}

a.apply(null, [5, 55]);
a.call(null, 5, 55);
bind函數(shù)

bind()方法會創(chuàng)建一個新函數(shù),當(dāng)這個新函數(shù)被調(diào)用時,它的this值是傳遞給bind()的第一個參數(shù), 它的參數(shù)是bind()的其他參數(shù)和其原本的參數(shù)

fun.bind(thisArg[, arg1[, arg2[, ...]]])
參數(shù):
    thisArg
        當(dāng)綁定函數(shù)被調(diào)用時,該參數(shù)會作為原函數(shù)運(yùn)行時的 this 指向。當(dāng)使用new 操作符調(diào)用綁定函數(shù)時,該參數(shù)無效。
    arg1, arg2, ...
        當(dāng)綁定函數(shù)被調(diào)用時,這些參數(shù)加上綁定函數(shù)本身的參數(shù)會按照順序作為原函數(shù)運(yùn)行時的參數(shù)

如果有興趣想知道 Function.prototype.bind() 內(nèi)部長什么樣以及是如何工作的,這里有個非常簡單的例子:

Function.prototype.bind = function (scope) {
    var fn = this;
    return function () {
        return fn.apply(scope);
    };
}

MDN為沒有自身實現(xiàn)bind() 方法的瀏覽器提供了一個絕對可靠的替代方案:

if (!Function.prototype.bind) {
  Function.prototype.bind = function (oThis) {
    if (typeof this !== "function") {
      // closest thing possible to the ECMAScript 5 internal IsCallable function
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    }
 
    var aArgs = Array.prototype.slice.call(arguments, 1), 
        fToBind = this, 
        fNOP = function () {},
        fBound = function () {
          return fToBind.apply(this instanceof fNOP && oThis
                                 ? this
                                 : oThis,
                               aArgs.concat(Array.prototype.slice.call(arguments)));
        };
 
    fNOP.prototype = this.prototype;
    fBound.prototype = new fNOP();
 
    return fBound;
  };
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80051.html

相關(guān)文章

  • Javascriptcall(),apply()和bind()

    摘要:在面向?qū)ο蟮闹?,我們了解到在中,一切都是對象。到目前為止,我們已將函?shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調(diào)用時執(zhí)行的代碼。這意味著,我們可以調(diào)用任何函數(shù),并在調(diào)用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向?qū)ο蟮腏S中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設(shè)置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    WrBug 評論0 收藏0
  • Javascriptcall(),apply()和bind()

    摘要:在面向?qū)ο蟮闹?,我們了解到在中,一切都是對象。到目前為止,我們已將函?shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調(diào)用時執(zhí)行的代碼。這意味著,我們可以調(diào)用任何函數(shù),并在調(diào)用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向?qū)ο蟮腏S中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設(shè)置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    Sike 評論0 收藏0
  • Javascriptcall(),apply()和bind()

    摘要:在面向?qū)ο蟮闹校覀兞私獾皆谥?,一切都是對象。到目前為止,我們已將函?shù)視為由名稱可選,也可以是匿名函數(shù)組成的對象及其在調(diào)用時執(zhí)行的代碼。這意味著,我們可以調(diào)用任何函數(shù),并在調(diào)用函數(shù)中明確指定。和用于完全相同的目的。 What s this 在面向?qū)ο蟮腏S中,我們了解到在JS中,一切都是對象。因為一切都是對象,我們開始明白我們可以為函數(shù)設(shè)置和訪問其他屬性。而this提供了一種更優(yōu)雅的方...

    sarva 評論0 收藏0
  • JavaScript深入之bind的模擬實現(xiàn)

    摘要:也就是說當(dāng)返回的函數(shù)作為構(gòu)造函數(shù)的時候,時指定的值會失效,但傳入的參數(shù)依然生效。構(gòu)造函數(shù)效果的優(yōu)化實現(xiàn)但是在這個寫法中,我們直接將,我們直接修改的時候,也會直接修改函數(shù)的。 JavaScript深入系列第十一篇,通過bind函數(shù)的模擬實現(xiàn),帶大家真正了解bind的特性 bind 一句話介紹 bind: bind() 方法會創(chuàng)建一個新函數(shù)。當(dāng)這個新函數(shù)被調(diào)用時,bind() 的第一個參數(shù)...

    FingerLiu 評論0 收藏0
  • call、apply、bind的用法小結(jié)

    摘要:新手經(jīng)常犯的一個錯誤是將一個方法從對象中拿出來,然后再調(diào)用,希望方法中的是原來的對象。如果不做特殊處理的話,一般會丟失原來的對象。 call、apply、bind是JavaScript中Function函數(shù)自帶的方法,主要用于改變this的指向 區(qū)別: call() 1.語法: fun.call(this, arg1,arg2) 2.this取值的幾點說明: (1)處于非嚴(yán)格模式下,...

    woshicixide 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<