成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

miya / 2326人閱讀

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

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

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

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

MDN上在關于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()方法是由內建函數(shù)(即JavaScript自帶函數(shù))或者是一個經過調用Function.prototype.bind方法后返回的綁定了上下文的函數(shù) 所調用時,返回的結果就是
"function () {    [native code]   }"

微軟MSDN上關于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.

可以看到在內建對象并且類型為Function時,調用toString()時,返回的也是:

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

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

轉載請注明本文地址:http://systransis.cn/yun/94032.html

相關文章

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

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

    Astrian 評論0 收藏0
  • Node_深入淺出Node

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

    shinezejian 評論0 收藏0
  • [譯] V8 使用者文檔

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

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

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

    cartoon 評論0 收藏0

發(fā)表評論

0條評論

miya

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<