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

js--手寫call和apply方法干貨注釋滿滿

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

我們都知道js中call和apply都是改變this指向的,這篇文章我們一起來(lái)實(shí)現(xiàn)call和apply的底層吧!我們先來(lái)看一下js中的call和apply的用法

一.用法

1.call用法 傳遞參數(shù)逗號(hào)分隔

// 1.js call的用法
function fnc(a,b,c) {
  console.log(this.name,a,b,c);
}
var obj = {
  name: "逍遙的碼農(nóng)",
};
// 這里我們想用fnc函數(shù)打印出obj對(duì)象里的name屬性
// 把obj為參數(shù)給call函數(shù)傳遞過去
fnc.call(obj,"參數(shù)1","參數(shù)2","參數(shù)3")

2.apply用法 傳遞參數(shù)為數(shù)組

// 1.js apply的用法
function fnc(a,b,c) {
  console.log(this.name,a,b,c);
}
var obj = {
  name: "逍遙的碼農(nóng)",
};
// 這里我們想用fnc函數(shù)打印出obj對(duì)象里的name屬性
// 把obj為參數(shù)給apply函數(shù)傳遞過去
fnc.apply(obj,["參數(shù)1","參數(shù)2","參數(shù)3"])

二.手寫實(shí)現(xiàn)call

1.手寫myCall改變this指向

function fnc(a, b, c) {
  console.log(this.name, a, b, c);
}
var obj = {
  name: "逍遙的碼農(nóng)",
};

Function.prototype.myCall = function (obj) {
  // 首先看一下這里的this 這里的this為fnc函數(shù)
  console.log(this);
  // 我們給傳過來(lái)的obj添加fnc函數(shù) 相當(dāng)于obj里面添加了一個(gè)p函數(shù)為fnc函數(shù)
  obj.p = this;
  // 運(yùn)行p函數(shù) 這里fnc的this已經(jīng)被改變?yōu)閛bj fnc函數(shù)正常打印出name
  obj.p();
  // 運(yùn)行完成刪除p方法 不能改變對(duì)象數(shù)據(jù)
  delete obj.p
};
fnc.myCall(obj);

這里this指向已經(jīng)改變,但是還不可以傳遞參數(shù)接下來(lái)傳參

2.傳遞參數(shù) 逗號(hào)分隔傳參

function fnc(a, b, c) {
  console.log(this.name, a, b, c);
}
var obj = {
  name: "逍遙的碼農(nóng)",
};

Function.prototype.myCall = function (obj) {
  //這里用arguments 他是一個(gè)偽數(shù)組并不是真正的數(shù)組 需要給他轉(zhuǎn)換成數(shù)組 這里使用Array.prototype.slice.call
  console.log(arguments)
  // 這里從第一個(gè)下標(biāo)截取 因?yàn)榈谝粋€(gè)參數(shù)為obj 我們不需要
  var ars =  Array.prototype.slice.call(arguments,1)
  console.log(ars)
  // 首先看一下這里的this 這里的this為fnc函數(shù)
  console.log(this);
  // 我們給傳過來(lái)的obj添加fnc函數(shù) 相當(dāng)于obj里面添加了一個(gè)p函數(shù)為fnc函數(shù)
  obj.p = this;
  // 運(yùn)行p函數(shù) 這里fnc的this已經(jīng)被改變?yōu)閛bj fnc函數(shù)正常打印出name 給p傳遞參數(shù)
  obj.p(...ars);
  // 運(yùn)行完成刪除p方法 不能改變對(duì)象數(shù)據(jù)
  delete obj.p
};
fnc.myCall(obj,"參數(shù)1","參數(shù)2","參數(shù)3");

這里就完成了call方法 接下來(lái)的apply肯定小伙伴已經(jīng)懂了吧 來(lái)咱們繼續(xù)

二.手寫實(shí)現(xiàn)apply

1.手寫myApply 數(shù)組傳遞參數(shù)

Function.prototype.myApply = function (obj, arr) {
  // 這里的this還是為為fnc函數(shù)
  console.log(this);
  obj.p = this;
  // 這里的arr為數(shù)組直接傳遞過去就可以了
  obj.p(...arr);
  delete obj.p;
},
fnc.myApply(obj, ["參數(shù)1", "參數(shù)2", "參數(shù)3"]);

apply很簡(jiǎn)單 只要把call弄懂了apply就很簡(jiǎn)單啦文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-735140.html

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

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

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

相關(guān)文章

  • 17 JavaScript 中的call和apply

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

    2024年02月11日
    瀏覽(26)
  • 前端 JS 經(jīng)典:apply、call、bind

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

    2024年02月07日
    瀏覽(28)
  • 基于matlab實(shí)現(xiàn)極致攻防優(yōu)化算法TTA求解復(fù)雜山地環(huán)境下無(wú)人機(jī)三維路徑規(guī)劃研究 注釋清楚,干貨滿滿,直接運(yùn)行

    基于matlab實(shí)現(xiàn)極致攻防優(yōu)化算法TTA求解復(fù)雜山地環(huán)境下無(wú)人機(jī)三維路徑規(guī)劃研究 注釋清楚,干貨滿滿,直接運(yùn)行

    ??作者簡(jiǎn)介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn), 代碼獲取、論文復(fù)現(xiàn)及科研仿真合作可私信。 ??個(gè)人主頁(yè):Matlab科研工作室 ??個(gè)人信條:格物致知。 更多Matlab完整代碼及仿真定制內(nèi)容點(diǎn)擊?? 智能優(yōu)化算法?? ? ??神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)?? ? ??雷達(dá)通信?? ?

    2024年02月04日
    瀏覽(92)
  • 【延伸學(xué)習(xí)】TS(JS)類的繼承(prototype、call、apply,extends)

    【延伸學(xué)習(xí)】TS(JS)類的繼承(prototype、call、apply,extends)

    PS:文末附上完整的代碼(是在CocosCreator下運(yùn)行的) 一. 基(父)類 ? 基類包含三個(gè)成員變量(名字、年齡)還有一個(gè)后面用于測(cè)試的數(shù)組,兩個(gè)原型方法(輸出名字,輸出年齡),還有一個(gè)類似靜態(tài)函數(shù)的方法。 基類唯一測(cè)試的,就是用類名可以直接調(diào)用eat這個(gè)靜態(tài)方法。

    2024年01月25日
    瀏覽(22)
  • Js:apply/call/bind、作用域/閉包、this指向(普通,箭頭,JS/Vue的this)

    Js:apply/call/bind、作用域/閉包、this指向(普通,箭頭,JS/Vue的this)

    共同點(diǎn): apply()、call() 和 bind() 方法 三者作用都是 改變this指向。 接收的第一個(gè)參數(shù)都是this要指向的對(duì)象 區(qū)別: apply只有兩個(gè)參數(shù),第二個(gè)參數(shù)為數(shù)組; call和bind傳參相同,多個(gè)參數(shù)依次傳入的; call和apply都是對(duì)函數(shù)進(jìn)行直接調(diào)用(立即執(zhí)行),而bind方法不會(huì)立即調(diào)用函數(shù)

    2023年04月08日
    瀏覽(20)
  • 【JavaScript】手撕前端面試題:手寫Object.create | 手寫Function.call | 手寫Function.bind

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

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

    2024年02月21日
    瀏覽(42)
  • JavaScript【History 對(duì)象、Cookie 對(duì)象 、封裝cookie操作、apply、call和bind函數(shù)、面向?qū)ο蠛?jiǎn)介、new 命令】(十八)
  • 54-函數(shù)的3種定義,函數(shù)的4種調(diào)用:函數(shù)模式調(diào)用,方法模式調(diào)用,構(gòu)造函數(shù)模式調(diào)用,apply call bind調(diào)用

    一.函數(shù)的3種定義? 1.函數(shù)的聲明定義:具有聲明提升 2.函數(shù)的表達(dá)式定義 3.構(gòu)造函數(shù)定義 var 變量 = new F unction(\\\"形參1\\\",\\\"形參2\\\",\\\"形參3\\\",\\\"方法體\\\"); 二.函數(shù)的4種調(diào)用 1普通模式調(diào)用 2. 內(nèi)聯(lián)模型 函數(shù)模式調(diào)用, this 指向 window ?

    2024年01月25日
    瀏覽(26)
  • JavaScript中apply函數(shù)方法多種使用方法!

    在JavaScript中, apply 是函數(shù)對(duì)象的一個(gè)方法,用于調(diào)用一個(gè)函數(shù),并指定函數(shù)內(nèi)部的 this 上下文以及函數(shù)的參數(shù)列表。它與另一個(gè)方法 call 功能類似,但是參數(shù)傳遞的方式略有不同。 apply 方法的語(yǔ)法如下: thisArg : 在調(diào)用函數(shù)時(shí)指定的 this 上下文,即函數(shù)內(nèi)部的 this 指向的對(duì)

    2024年03月10日
    瀏覽(16)
  • unsigned詳講(干貨滿滿)

    unsigned詳講(干貨滿滿)

    前言 : 過年偷懶了(●ˇ?ˇ●),但是年后開學(xué)了一定要恢復(fù)學(xué)習(xí)狀態(tài),在復(fù)習(xí)加繼續(xù)學(xué)習(xí)的途中,我發(fā)現(xiàn)對(duì)于unsigned的掌握并不是很熟練,于是翻閱了各個(gè)大佬的博客以及書籍,總結(jié)了對(duì)于unsigned的一些知識(shí)點(diǎn)。(如有不對(duì)的地方,歡迎各位大佬指正??) 什么是unsi

    2024年02月14日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包