簡體   English   中英

是否可以檢查一個函數是JavaScript函數還是開發人員定義的函數?

[英]Is it possible to check whether a function is a javascript function or a developer defined function?

給定一個函數,我想知道它是開發人員定義的函數還是JavaScript引擎提供的內置函數。 可能嗎?

對於開發人員定義的函數,我想跟蹤其執行情況。

我自己有一個解決方案-使用valueOf method()。

復制並粘貼以下內容

valueOf方法返回一個表示函數源代碼的字符串。 這將覆蓋Object.valueOf方法。 JavaScript通常在后台調用valueOf方法,但是為了演示輸出,以下代碼首先創建一個名為Car的Function對象,然后顯示該函數的值:

代碼:function car(make,model,year){this.make = make,this.model = model,this.year = year} document.write(car.valueOf())

輸出:function car(make,model,year){this.make =品牌,this.model =型號,this.year =年

使用內置的Function對象,valueOf方法將產生以下字符串:

輸出:函數Function(){[本地代碼]}。

從一般意義上講,不是。 Javascript內置對象和函數不具有(或缺少)可以在運行時進行測試的任何特殊屬性,以保證它不是開發人員定義的函數。 開發人員可以覆蓋所有方法和對象。

您在自己的答案中提到的valueOf方法將無法正常使用。

Function.prototype沒有valueOf方法,它是從Object.prototype繼承的,此方法將簡單地返回您調用它的相同函數對象:

Function.valueOf() === Function; // true

我認為您將其與toString方法混淆了(或者您正在警告valueOf方法調用,這會在大多數瀏覽器上導致隱式ToString轉換)。

但是,您可以直接在函數對象上使用toString方法,並且在幾乎所有的實現中,它都會在函數體中返回一個包含"[native code]"的字符串表示形式,我不建議過多使用它,因為Function.prototype.toString方法取決於實現...

function isNative(fn) {
  return /native code/.test(fn.toString);
}

isNative(Function); // true
isNative(function () {}); // false

再次提醒您,有些瀏覽器在函數上使用toString方法時將返回不同的結果,例如,某些移動瀏覽器將為任何函數對象返回相同的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM