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

資訊專欄INFORMATION COLUMN

教你如何檢查一個(gè)函數(shù)是否為JavaScript運(yùn)行時(shí)環(huán)境內(nèi)建函數(shù)

miya / 2372人閱讀

摘要:但有些時(shí)候我們可能需要知道現(xiàn)在某個(gè)到底是否為運(yùn)行時(shí)環(huán)境所原生支持,還是代碼支持的。今天在學(xué)習(xí)版本的源代碼時(shí),就發(fā)現(xiàn)了中也有用來檢測(cè)一個(gè)函數(shù)是否為運(yùn)行時(shí)原生支持。

在開發(fā)過程中,對(duì)于某些API在現(xiàn)有的JavaScript運(yùn)行時(shí)環(huán)境不支持的時(shí)候,我們大都會(huì)采用加入polyfill來解決這個(gè)問題。但有些時(shí)候我們可能需要知道現(xiàn)在某個(gè)API到底是否為運(yùn)行時(shí)環(huán)境所原生支持,還是polyfill代碼支持的。今天在學(xué)習(xí)Vue 2.X版本的源代碼時(shí),就發(fā)現(xiàn)了Vue中也有用來檢測(cè)一個(gè)函數(shù)是否為運(yùn)行時(shí)原生支持。
function isNative (Ctor) {
  return typeof Ctor === "function" && /native code/.test(Ctor.toString())
}

注意:上述代碼是我去除Vue中有關(guān)于(flow)類型聲明信息后所得

首先,檢測(cè)要被檢測(cè)者是否是函數(shù)類型,然后會(huì)檢測(cè)這個(gè)被檢測(cè)的函數(shù)toString之后的字符串中是否帶有native code字眼,如果符合這兩個(gè)條件,那么說明被檢測(cè)者是一個(gè)當(dāng)前JavaScript運(yùn)行時(shí)原生支持的函數(shù)。
有些人可能會(huì)問:為什么要檢測(cè)這個(gè)被檢測(cè)的函數(shù)toString之后的字符串中是否帶有native code字眼,為此我去看了ECMA-262最新規(guī)范,很遺憾我沒有找到依據(jù),所以我只能退而求其次去看了MDN和MSDN,看看上面怎么說。

MDN上在關(guān)于Function.prototype.toString()一章上是這么說的:

If the toString() method is called on built-in function objects or a function created by Function.prototype.bind, toString() returns a native function string which looks like
"function () {    [native code]   }"

義譯一下就是說:

如果toString()方法是由內(nèi)建函數(shù)(即JavaScript自帶函數(shù))或者是一個(gè)經(jīng)過調(diào)用Function.prototype.bind方法后返回的綁定了上下文的函數(shù) 所調(diào)用時(shí),返回的結(jié)果就是
"function () {    [native code]   }"

微軟MSDN上關(guān)于toString Method (Object) (JavaScript)一章中是這么說的:

The toString method is a member of all built-in JavaScript objects. How it behaves depends on the object type:
Object Behavior
Array Elements of an Array are converted to strings. The resulting strings are concatenated, separated by commas.
Boolean If the Boolean value is true, returns "true". Otherwise, returns "false".
Date Returns the textual representation of the date.
Error Returns a string containing the associated error message.
Function Returns a string of the following form, where functionname is the name of the function whose toString method was called:

function functionname( ) { [native code] }
Number Returns the textual representation of the number.
String Returns the value of the String object.
Default Returns "[object objectname]", where objectname is the name of the object type.

可以看到在內(nèi)建對(duì)象并且類型為Function時(shí),調(diào)用toString()時(shí),返回的也是:

"function functionname( ) { [native code] }"
結(jié)論:當(dāng)一個(gè)對(duì)象為JavaScript運(yùn)行時(shí)build-in object (內(nèi)建對(duì)象),并且類型為Function類型時(shí),對(duì)其調(diào)用toString()方法后,返回的結(jié)果字符串就是如下:
"function functionname( ) { [native code] }"
所以我們可以根據(jù)這一特性來得出如何去檢查一個(gè)函數(shù)是否為JavaScript運(yùn)行時(shí)環(huán)境內(nèi)建函數(shù)

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

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

相關(guān)文章

  • [你不知道的 JavaScript 類型和語法] 第一章:類型

    摘要:語言中規(guī)定的類型為以及。這兩個(gè)值有不同的類型。內(nèi)建類型定義了七種內(nèi)建類型中新增提示以上類型,除的被稱為基本類型。新增列出的六種類型的值都會(huì)返回一個(gè)對(duì)應(yīng)類型名稱的字符串。是中新增的數(shù)據(jù)類型,我們會(huì)在第三章詳細(xì)介紹。 譯者的前言 一直都想好好研究這個(gè)在 GitHub 上很有名氣的系列,而翻譯恰是最好的閱讀途徑之一。可以讓我閱讀的時(shí)候,不那么不求甚解。 圖靈社區(qū)出版了該系列兩部分的中文版——...

    Astrian 評(píng)論0 收藏0
  • Node_深入淺出Node

    摘要:簡(jiǎn)介項(xiàng)目命名為就是一個(gè)服務(wù)器單純開發(fā)一個(gè)服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架發(fā)展為一個(gè)強(qiáng)制不共享任何資源的單線程,單進(jìn)程系統(tǒng)。單線程弱點(diǎn)無法利用多核錯(cuò)誤會(huì)引起整個(gè)應(yīng)用退出,應(yīng)用的健壯性大量計(jì)算占用導(dǎo)致無法繼續(xù)調(diào)用異步。 NodeJs簡(jiǎn)介 Ryan Dahl項(xiàng)目命名為:web.js 就是一個(gè)Web服務(wù)器.單純開發(fā)一個(gè)Web服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架.Node發(fā)展...

    shinezejian 評(píng)論0 收藏0
  • [譯] V8 使用者文檔

    摘要:注意句柄棧并不是調(diào)用棧中的一部分,但句柄域卻在棧中。一個(gè)依賴于構(gòu)造函數(shù)和析構(gòu)函數(shù)來管理下層對(duì)象的生命周期。對(duì)象模板用來配置將這個(gè)函數(shù)作為構(gòu)造函數(shù)而創(chuàng)建的對(duì)象。 如果你已經(jīng)閱讀過了上手指南,那么你已經(jīng)知道了如何作為一個(gè)單獨(dú)的虛擬機(jī)使用 V8 ,并且熟悉了一些 V8 中的關(guān)鍵概念,如句柄,域 和上下文。在本文檔中,還將繼續(xù)深入討論這些概念并且介紹其他一些在你的 C++ 應(yīng)用中使用 V8 的...

    lei___ 評(píng)論0 收藏0
  • Node.js 應(yīng)用建立一個(gè)更安全的沙箱環(huán)境

    摘要:當(dāng)運(yùn)行函數(shù)的時(shí)候,只能訪問自己的本地變量和全局變量,不能訪問構(gòu)造器被調(diào)用生成的上下文的作用域。如何建立一個(gè)更安全一些的沙箱通過上文的探究,我們并沒有找到一個(gè)完美的方案在建立安全的隔離的沙箱。 showImg(https://segmentfault.com/img/remote/1460000014575992); 有哪些動(dòng)態(tài)執(zhí)行腳本的場(chǎng)景? 在一些應(yīng)用中,我們希望給用戶提供插入自定義...

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

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

0條評(píng)論

miya

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<