国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

手寫apply、call、bind

這篇具有很好參考價(jià)值的文章主要介紹了手寫apply、call、bind。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

apply

作用:改變this執(zhí)行,函數(shù)立即執(zhí)行,參數(shù)以數(shù)組傳遞

思路:

? ? ? ? 1、在this新指向的對象上,增加一個(gè)函數(shù)等于待執(zhí)行函數(shù)

? ? ? ? 2、去參數(shù)

? ? ? ? 3、執(zhí)行函數(shù)

? ? ? ? 4、刪除增加的函數(shù),返回結(jié)果

    // apply
    function applyTest() {
        var person = {
            fullName: function (city, country) {
                return this.firstName + " " + this.lastName + "," + city + "," + country;
            }
        }
        var person1 = {
            firstName: "Bill",
            lastName: "Gates"
        }
        console.log(person.fullName.myApply(person1, ["Oslo", "Norway"]));
    }

    // 手寫applyTest (參數(shù)以數(shù)組形式在第二個(gè)參數(shù)傳遞, 立即執(zhí)行)
    Function.prototype.myApply = function (context) {
        if (typeof this !== 'function') {
            conole.error('this is not a function');
        }
        let result = null;
        context = context || window;
        context.fn = this; // 將函數(shù)綁定到當(dāng)前上下文中
        result = context.fn(...arguments[1]); //取得第二個(gè)參數(shù)(數(shù)組)并展開傳給函數(shù) 
        delete context.fn; // 刪除新增的函數(shù)
        return result;
    }

call

作用:改變this執(zhí)行,函數(shù)立即執(zhí)行,參數(shù)依次傳遞

思路:

? ? ? ? 1、在this新指向的對象上,增加一個(gè)函數(shù)等于待執(zhí)行函數(shù)

? ? ? ? 2、取參數(shù)

? ? ? ? 3、執(zhí)行函數(shù)

? ? ? ? 4、刪除增加的函數(shù),返回結(jié)果

    // call
    function callTest() {
        var person = {
            fullName: function (city, country) {
                return this.firstName + " " + this.lastName + "," + city + "," + country;
            }
        }
        var person1 = {
            firstName: "Bill",
            lastName: "Gates"
        }
        console.log(person.fullName.myCall(person1, "Oslo", "Norway"));
    }

    // 手寫call (參數(shù)依次展開, 立即執(zhí)行)
    Function.prototype.myCall = function(context) {
        if (typeof this !== 'function') {
            console.error('this is not a function');
        }
        context = context || window;
        let result = null;
        context.fn = this; // 將函數(shù)綁定到當(dāng)前上下文中
        result = context.fn(...[...arguments].slice(1)); //取得第除第一個(gè)參數(shù)之外的參數(shù)并展開傳給函數(shù) 
        delete context.fn;  // 刪除新增的函數(shù)
        return result;
    }

bind

作用:改變this執(zhí)行,返回一個(gè)函數(shù),參數(shù)依次傳遞

思路:

? ? ? ? 1、指定一個(gè)函數(shù)等于當(dāng)前函數(shù)

? ? ? ? 2、返回一個(gè)新函數(shù)

? ? ? ? 3、函數(shù)中使用apply立即執(zhí)行函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-464249.html

    function bindTest() {
        var person = {
            fullName: function (city, country) {
                return this.firstName + " " + this.lastName + "," + city + "," + country;
            }
        }
        var person1 = {
            firstName: "Bill",
            lastName: "Gates"
        }
        console.log(person.fullName.myBind(person1, "Oslo", "Norway")());
    }    
    // 手寫bind (參數(shù)依次展開,不立即執(zhí)行)
    Function.prototype.myBind = function(context) {
        if (typeof this !== 'function') {
            console.error('this is not a function');
        }
        let args = [...arguments].slice(1),
        fn = this;

        return function Fn() {
            return fn.apply(
                this instanceof Fn ? this : context, // 因?yàn)榉祷氐暮瘮?shù),防止new執(zhí)行,所以判斷一下,如果是new出來的執(zhí)行this環(huán)境下的,如果不是就是新上下文環(huán)境下的
                args.concat(...arguments)
            )
        }

    }

到了這里,關(guān)于手寫apply、call、bind的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JavaScript【History 對象、Cookie 對象 、封裝cookie操作、apply、call和bind函數(shù)、面向?qū)ο蠛喗椤ew 命令】(十八)
  • 前端 JS 經(jīng)典:apply、call、bind

    1. 概念 都是用來改變函數(shù)中 this 指向的。區(qū)別在于 apply、call 傳參方式不一樣,調(diào)用后,直接執(zhí)行函數(shù)。bind 調(diào)用后,返回一個(gè)函數(shù)體,不直接執(zhí)行函數(shù)。 2. 為什么用 那為什么要改變 this 指向呢。正常情況下,誰調(diào)用函數(shù) this 就指向誰。那調(diào)用這個(gè)函數(shù)的那個(gè)誰,要訪問另一

    2024年02月07日
    瀏覽(28)
  • (十六)call、apply、bind介紹、區(qū)別和實(shí)現(xiàn)

    (十六)call、apply、bind介紹、區(qū)別和實(shí)現(xiàn)

    函數(shù)中的this指向是在函數(shù)被調(diào)用的時(shí)候確定的,也就是執(zhí)行上下文被創(chuàng)建時(shí)確定的。在一個(gè)執(zhí)行上下文中,this由 調(diào)用者 提供,由 調(diào)用函數(shù) 的方式來決定。 arguments只在函數(shù)(除了箭頭函數(shù))中存在的類數(shù)組參數(shù)對象,儲(chǔ)存了我們傳入的所有參數(shù)。 call(this, 參1, 參2, ...) ,第

    2024年04月23日
    瀏覽(22)
  • js--手寫call和apply方法干貨注釋滿滿

    我們都知道js中call和apply都是改變this指向的,這篇文章我們一起來實(shí)現(xiàn)call和apply的底層吧!我們先來看一下js中的call和apply的用法 一.用法 1.call用法 傳遞參數(shù)逗號分隔 2.apply用法 傳遞參數(shù)為數(shù)組 二.手寫實(shí)現(xiàn)call 1.手寫myCall改變this指向 這里this指向已經(jīng)改變,但是還不可以傳遞

    2024年02月06日
    瀏覽(28)
  • 【JavaScript】手撕前端面試題:手寫Object.create | 手寫Function.call | 手寫Function.bind

    【JavaScript】手撕前端面試題:手寫Object.create | 手寫Function.call | 手寫Function.bind

    ??? NodeJS專欄:Node.js從入門到精通 ??? 博主的前端之路(源創(chuàng)征文一等獎(jiǎng)作品):前端之行,任重道遠(yuǎn)(來自大三學(xué)長的萬字自述) ??? TypeScript知識(shí)總結(jié):TypeScript從入門到精通(十萬字超詳細(xì)知識(shí)點(diǎn)總結(jié)) ?????個(gè)人簡介:大三學(xué)生,一個(gè)不甘平庸的平凡人?? ??

    2024年02月21日
    瀏覽(42)
  • defineProps和立即執(zhí)行函數(shù)不能一起使用的問題

    defineProps和立即執(zhí)行函數(shù)不能一起使用的問題

    最近在開發(fā)的時(shí)候碰到一個(gè)很有意思的現(xiàn)象,在一個(gè)組件內(nèi),我需要定義props,使用方式如下: 本來這里是沒有任何問題的,但是問題出在后面的代碼里,我們知道Vue3的組合式API生命周期是不存在 created 相關(guān)的鉤子函數(shù)的,如果我們希望在dom實(shí)例掛載之前做一些操作,例如請

    2023年04月09日
    瀏覽(23)
  • 匿名/箭頭函數(shù),立即執(zhí)行函數(shù)IIFE;函數(shù)聲明式和函數(shù)表達(dá)式

    匿名/箭頭函數(shù),立即執(zhí)行函數(shù)IIFE;函數(shù)聲明式和函數(shù)表達(dá)式

    目錄 匿名/箭頭函數(shù):簡潔 繼承上一層作用域鏈的this 不綁定arguments,用rest參數(shù) ?rest 參數(shù):...真正的數(shù)組 因?yàn)闆]有function聲明,所以沒有原型prototype,所以不能作為構(gòu)造函數(shù) 當(dāng)函數(shù)體只有一句時(shí),可省 return ,?{} IIFE:()()(立即調(diào)用函數(shù)表達(dá)式)/自執(zhí)行匿名函數(shù) 函數(shù)定義方式

    2024年01月19日
    瀏覽(17)
  • kotlin的擴(kuò)展函數(shù)“l(fā)et、run、also、apply”的作用和區(qū)別

    Kotlin的擴(kuò)展函數(shù) let 、 run 、 also 、 apply 都是用于簡化代碼的工具,它們可以在不修改原始類或?qū)ο蟮那闆r下添加新的功能和行為。下面是它們的作用和區(qū)別: let :用于對一個(gè)可空對象進(jìn)行操作,避免出現(xiàn)空指針異常。它會(huì)將對象作為lambda表達(dá)式的參數(shù)傳遞,并返回lambda表達(dá)

    2024年02月14日
    瀏覽(28)
  • 17 JavaScript 中的call和apply

    17 JavaScript 中的call和apply 對于咱們逆向工程師而言. 并不需要深入的理解call和apply的本質(zhì)作用. 只需要知道這玩意執(zhí)行起來的邏輯順序是什么即可 在運(yùn)行時(shí). 正常的js調(diào)用: 接下來, 我們可以使用call和apply也完成同樣的函數(shù)調(diào)用 apply和他幾乎一模一樣. 區(qū)別是: apply傳遞參數(shù)要求是

    2024年02月11日
    瀏覽(26)
  • 【JavaScript】Function的祖?zhèn)鞣椒╟all與apply

    【JavaScript】Function的祖?zhèn)鞣椒╟all與apply

    看了本文您能了解到的知識(shí)! 在本篇文章中,將帶你了解 什么是call和apply , call和apply的用途 、如何手寫 call 和 apply 以及 call 和 apply 的使用場景。 call() 和 apply() 是 JavaScript 中的兩個(gè)內(nèi)置方法,用于調(diào)用函數(shù)并指定函數(shù)中的 this 值。 兩者的區(qū)別是: call() 方法的語法和作用

    2024年02月17日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包