Math.mymfunc = function (x) {
return x+1;
}
將被視爲一個屬性,當我寫
for(var p in Math.__proto__) console.log(p)
將示出。但其餘的數學函數不會。我如何獲得Math對象的所有功能?
Math.mymfunc = function (x) {
return x+1;
}
將被視爲一個屬性,當我寫
for(var p in Math.__proto__) console.log(p)
將示出。但其餘的數學函數不會。我如何獲得Math對象的所有功能?
Object.getOwnPropertyNames(Math);
是你所追求的。
這將記錄所有屬性的前提是你正在處理一個的EcmaScript 5兼容的瀏覽器。
var objs = Object.getOwnPropertyNames(Math);
for(var i in objs){
console.log(objs[i]);
}
它的工作原理!太好了! – Andr
The specification不會出現什麼性質的Math
功能與定義來定義。大多數實現似乎都將DontEnum
應用於這些函數,這意味着它們在用for(i in Math)
循環迭代時不會顯示在對象中。
請問你需要做什麼?不會有太多的功能,因此它可能是最好只是自己定義他們的數組:
var methods = ['abs', 'max', 'min', ...etc.];
var functionNames = [];
Object.getOwnPropertyNames(obj).forEach(function(property) {
if(typeof obj[property] === 'function') {
functionNames.push(property);
}
});
console.log(functionNames);
這就給了你是函數的性質的名稱的數組。接受的答案爲您提供了所有屬性的名稱。
只是好奇,你爲什麼需要它? – zzzzBov
'mymfunc'不應出現在枚舉中,因爲您正在枚舉不同的對象('Math' vs'Object.prototype')。如果您在控制檯中運行該代碼,它可能看起來好像它一樣,但實際上控制檯僅顯示了賦值的結果。 – user113716
一種可能的用法 - 用於構建在對象中的JS的文檔工具。另一種用法 - 爲Math對象構建一個UI(例如計算器) – James