成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

mrcode / 2423人閱讀

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

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

apply和call函數(shù)

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

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

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

    fun.call(thisArg[, arg1[, arg2[, ...]]])
    參數(shù):
        thisArg
            在fun函數(shù)運(yùn)行時(shí)指定的this值。需要注意的是,指定的this值并不一定是該函數(shù)執(zhí)行時(shí)真正的this值,如果這個(gè)函數(shù)處于非嚴(yán)格模式下,則指定為null和undefined的this值會(huì)自動(dòng)指向全局對(duì)象(瀏覽器中就是window對(duì)象),同時(shí)值為原始值(數(shù)字,字符串,布爾值)的this會(huì)指向該原始值的自動(dòng)包裝對(duì)象。
            
        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()方法會(huì)創(chuàng)建一個(gè)新函數(shù),當(dāng)這個(gè)新函數(shù)被調(diào)用時(shí),它的this值是傳遞給bind()的第一個(gè)參數(shù), 它的參數(shù)是bind()的其他參數(shù)和其原本的參數(shù)

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

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

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

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

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80051.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<