簡體   English   中英

在Javascript中,如果有一個對象具有很多作為函數的屬性,那么如何將它們轉換為(函數名稱的)字符串數組?

[英]In Javascript, if there is an object with a lot of properties that are functions, how do you convert them to array of strings (of the function names)?

在Javascript中,如果對象具有許多作為函數的屬性:

var obj = { foo: function() { ... },
            bar: function() { ... },
              ...
          }

那么如何獲得這些函數的名稱數組? 也就是說,一個數組

["foo", "bar", ... ]

謝謝。

var names = [];
for( var k in obj ) {
   if(obj.hasOwnProperty(k) && typeof obj[k] == 'function') {
      names.push(k);
   }
}
var functions = [];
for (var prop in obj) {
    if ((typeof obj[prop]) == 'function') {
        // it's a function
        functions.push(prop);
    }
}

編輯:我稍微誤解的問題,要提取只有那些函數對象的屬性的名稱:

function methods(obj) {
  var result = [];
  for (var prop in obj) {
    if (obj.hasOwnProperty(prop) && typeof obj[prop] == 'function') {
      result.push(prop);
    }
  }
  return result;
}

var obj = {
  foo: function() { },
  bar: function() { },
};

methods(obj); // ["foo", "bar"]

我正在使用hasOwnProperty方法,以確保枚舉的屬性實際上實際上存在於對象中。

請注意,此方法和所有其他答案都有一個小的問題IE。

JScript的DontEnum Bug是在原型鏈中DontEnum不可枚舉屬性( DontEnum )的自定義屬性,不會使用for-in語句枚舉,例如:

var foo = {
  constructor : function() { return 0; },
  toString : function() { return "1"; },
  valueOf : function() { return 2; }
  toLocaleString : function() { return "3"; }
};

for (var propName in foo ) { alert(propName); }

對象foo顯然定義了四個自己的屬性,但是這些屬性存在於標為DontEnum Object.prototype ,如果嘗試使用IE中的for-in語句枚舉該對象的屬性,它將找不到任何屬性。

此錯誤存在於所有IE版本中,並且最近已在IE9 Platform Preview中修復。

要完成其他答案:您還可以使用instanceof

var obj = { foo: function() { ... },
            bar: function() { ... },
              ...
          },
    fnArr = [];

for (var label in obj){
  if (obj[label] instanceof Function){
     fnArr.push(label)
  }
}

使用ES5

var obj = {
    foo: function() {},
    bar: function() {},
    baz: true
};

function getMethods(object) {
    return Object.keys(object).filter(function(key) {
        return typeof object[key] == 'function';
    });
}

getMethods(obj); // [foo, bar]

Object.keys(<object>)以數組形式返回Object.keys(<object>)的所有可枚舉屬性的名稱,其中的所有非函數均被濾除。

示例 -適用於Chrome版本以及WebkitTracemonkey(Firefox)的夜間構建。

暫無
暫無

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

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