真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

原生js代碼能不能實現(xiàn)call和bind-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關原生js代碼能不能實現(xiàn)call和bind的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

蒲江縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)

js手動實現(xiàn)call和bind都是謊言

網(wǎng)上有很多關于說自己實現(xiàn)call和bind的原理的文章,然而call和bind的原理真如他們所說的那樣嗎?今天就讓我來推翻這些所謂的”原理“,揭開謊言下的真相。

首先看看網(wǎng)上對call的實現(xiàn):

// 手寫 call
Function.prototype.mycall = function (context) {
  context = context || window;
  context.fn = this;
  const args = [...arguments].slice(1);
  const result = context.fn(...args);
  // 執(zhí)行fn時上下文context已被修改,不是我們所期望的call 
  delete context.fn;
  return result;
}
function show() {
  console.log(this);
}
show.mycall({haha:122});

以上代碼的執(zhí)行結果是

原生js代碼能不能實現(xiàn)call和bind

如你所見,這樣實現(xiàn)的call并不是我們所期望的那樣。

對比于函數(shù)自帶的call:

show.call({haha:122})

其結果為

原生js代碼能不能實現(xiàn)call和bind

分析其原因不難發(fā)現(xiàn),根據(jù)函數(shù)mycall,執(zhí)行context.fn(...args)之前修改了上下文context,所以執(zhí)行fn時所使用的上下文是修改后的上下文,導致與預期結果相差甚遠。

核心

而且,往更深的層次去思考,call絕不是這樣(或類似這樣)實現(xiàn)的,call是底層語言為瀏覽器封裝好的函數(shù),是絕對不能也沒必要用js強行模仿的。

綜上,js模仿call和bind絕對沒有get到底層原理,這樣的模仿只能用于娛樂而已,沒有實際價值。bind和call類似,這里就不贅述了。

感謝各位的閱讀!關于“原生js代碼能不能實現(xiàn)call和bind”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


本文名稱:原生js代碼能不能實現(xiàn)call和bind-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/decgod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部