Есть ли способ распечатать все методы объекта в javascript?


есть ли способ распечатать все методы объекта в javascript?

7 58

7 ответов:

обязательно:

function getMethods(obj) {
  var result = [];
  for (var id in obj) {
    try {
      if (typeof(obj[id]) == "function") {
        result.push(id + ": " + obj[id].toString());
      }
    } catch (err) {
      result.push(id + ": inaccessible");
    }
  }
  return result;
}

используя это:

alert(getMethods(document).join("\n"));

вот сообщение на отражение в JS. Он должен делать то, что вы ищете.

Если вы просто хотите посмотреть, что находится внутри объекта, вы можете распечатать все ключи объекта. Некоторые из них могут быть переменными, другие - способы.

метод не очень точен, однако это очень быстро:

console.log(Object.keys(obj));

здесь ES6 образец.

// Get the Object's methods names:
function getMethodsNames(obj = this) {
    return Object.keys(this)
        .filter((key) => typeof this[key] === 'function');
}

// Get the Object's methods (functions):
function getMethods(obj = this) {
    return Object.keys(this)
        .filter((key) => typeof this[key] === 'function')
        .map((key) => this[key]);
}

obj = this является параметром по умолчанию ES6, вы можете передать объект или он будет по умолчанию this.

Object.keys возвращает массив Objectсобственные перечислимые свойства. Через window объект он вернется [..., 'localStorage', ...'location'].

(param) => ... это функция стрелки ES6, это стенография для

function(param) {
    return ...
}

с неявным возвратом.

Array.filter создает новый массив со всеми элементы, которые проходят тест (typeof this[key] === 'function').

Array.map создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве (return this[key]).

взгляните на этот код:-

function writeLn(s)
{
    //your code to write a line to stdout
    WScript.Echo(s)
}

function Base() {}
Base.prototype.methodA = function() {}
Base.prototype.attribA = "hello"

var derived = new Base()
derived.methodB = function() {}
derived.attribB = "world";

function getMethods(obj)
{
    var retVal = {}

    for (var candidate in obj)
    {
        if (typeof(obj[candidate]) == "function")
            retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)}
    }
    return retVal
}

var result = getMethods(derived)
for (var name in result)
{
    writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited")
}

функция getMethod возвращает набор методов вместе с тем, является ли метод тем, который был унаследован от прототипа.

обратите внимание, что если вы собираетесь использовать это на объекты, которые предоставляются из контекста, такие как browser/DOM объекта, то он не будет работать IE.

С здесь:

Пример 1: в этом примере записываются все свойства объекта "навигатор", а также их значения:

for (var myprop in navigator){
 document.write(myprop+": "+navigator[myprop]+"<br>")
}

просто замените "навигатор" на любой объект, который вас интересует, и вы должны быть хорошо идти.

как упоминал Энтони в разделе комментариев - Это возвращает все атрибуты, а не только методы, как заданный вопрос.

Упс! Это научит меня пытаться ответить на вопрос в a язык я не знаю. Тем не менее, я думаю, что код полезен - просто не то, что требовалось.

поскольку методы в JavaScript-это просто свойства, которые являются функциями, то for..in цикл будет перечислять их с исключением - он не будет перечислять встроенные методы. Насколько я знаю, нет никакого способа перечислить встроенные методы. И вы не можете объявить свои собственные методы или свойства для объекта, который не перечисляется таким образом.