2011-09-25 28 views
6

例如,獲取一個對象的所有功能在JavaScript

Math.mymfunc = function (x) { 
    return x+1; 
} 

將被視爲一個屬性,當我寫

for(var p in Math.__proto__) console.log(p) 

將示出。但其餘的數學函數不會。我如何獲得Math對象的所有功能?

+0

只是好奇,你爲什麼需要它? – zzzzBov

+0

'mymfunc'不應出現在枚舉中,因爲您正在枚舉不同的對象('Math' vs'Object.prototype')。如果您在控制檯中運行該代碼,它可能看起來好像它一樣,但實際上控制檯僅顯示了賦值的結果。 – user113716

+0

一種可能的用法 - 用於構建在對象中的JS的文檔工具。另一種用法 - 爲Math對象構建一個UI(例如計算器) – James

回答

11

Object.getOwnPropertyNames(Math);是你所追求的。

這將記錄所有屬性的前提是你正在處理一個的EcmaScript 5兼容的瀏覽器。

var objs = Object.getOwnPropertyNames(Math); 
for(var i in objs){ 
    console.log(objs[i]); 
} 
+0

它的工作原理!太好了! – Andr

0

console.log(Math)應該工作。

+1

除此之外,它不能讓您以編程方式訪問它們,我想象的是OP所尋找的內容。 – James

2

The specification不會出現什麼性質的Math功能與定義來定義。大多數實現似乎都將DontEnum應用於這些函數,這意味着它們在用for(i in Math)循環迭代時不會顯示在對象中。

請問你需要做什麼?不會有太多的功能,因此它可能是最好只是自己定義他們的數組:

var methods = ['abs', 'max', 'min', ...etc.]; 
3
var functionNames = []; 

Object.getOwnPropertyNames(obj).forEach(function(property) { 
    if(typeof obj[property] === 'function') { 
    functionNames.push(property); 
    } 
}); 

console.log(functionNames); 

這就給了你是函數的性質的名稱的數組。接受的答案爲您提供了所有屬性的名稱。

相關問題