2013-10-26 99 views
2

可以說如果我有一個功能a。我想知道它的內置功能或用戶定義的功能。
我試過檢查a.toString()是否有[native code],但是具有子字符串[native code]的用戶定義函數會失敗。有沒有更好的方法來做到這一點?如何查找功能是否內置功能或用戶定義

+2

_Custom_功能'的toString()'不能結束'[本地代碼]}',否則函數(源)會因語法錯誤編譯。 – tenbits

+0

哦,這是有道理..guess我應該有更多的想法 聚苯乙烯 - 我可以接受它,如果發佈這是一個答案 – everconfusedGuy

回答

1

所以,這裏的一些代碼來檢查:

var rgx = /\[native code\]\s*\}\s*$/; 

function some(){ 
    '[native code]' 
} 

console.log(
    rgx.test(print.toString()), 
    rgx.test(some.toString()) 
); 
+0

我已經使用過'some.toString()。indexOf('[native code]',some.toString()。length - '[native code]'。length)!== -1 '測試它..使用正則表達式好像也不錯 – everconfusedGuy

+0

你的代碼是否可以使用內置函數?當你查看字符串化函數的結尾時,但它以'[native code]}結尾'而且在IE中有新行'[native code]'和'}',所以正則表達式也可以處理它。祝你好運! – tenbits

1

一個,也許是天真的,方法是將測試功能名稱中是否存在該文件的屬性:

function newFunction(){ 
    return true; 
} 

console.log('newFunction' in document, 'toString' in document); 

這,當然,詳盡測試,如果沒有失敗功能被創建爲一個prototype的延伸,例如:

function newFunction(){ 
    return true; 
} 

Object.prototype.newFunctionName = function() { 
    return 10 * 2; 
}; 

console.log('newFunction' in document, 'toString' in document, 'newFunctionName' in document); // false, true, true 

JS Fiddle demo

鑑於它也失敗了'eval' in document(在它返回false),那麼這將或可以,只有合作,以確定對象的原型方法。充其量,這是一個不完整的解決方案。

+0

'eval'在文檔中返回false – everconfusedGuy

+0

不幸的是,我很尷尬,承認我有沒有更好的想法... :( –