Existe um método ou propriedade para obter todos os métodos de um objeto? Por exemplo:
function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}
foo.get_methods(); // returns ['a', 'b'];
ATUALIZAÇÃO: Existe algum método assim no Jquery?
Obrigado.
Respostas:
fonte
for..in
caminho é a abordagem padrão.TypeError: '[object Object]' is not a function (evaluating 'obj(m)')
m instanceof Function
?Lembre-se de que tecnicamente os objetos javascript não possuem métodos. Eles têm propriedades, algumas das quais podem ser objetos de função. Isso significa que você pode enumerar os métodos em um objeto da mesma forma que pode enumerar as propriedades. Isso (ou algo próximo a isso) deve funcionar:
Há complicações para isso porque algumas propriedades dos objetos não são enumeráveis, portanto, você não será capaz de encontrar todas as funções no objeto.
fonte
Você pode usar
console.dir(object)
para gravar as propriedades dos objetos no console.fonte
Em navegadores modernos, você pode usar
Object.getOwnPropertyNames
para obter todas as propriedades (enumeráveis e não enumeráveis) em um objeto. Por exemplo:Observe que isso só recupera propriedades próprias , portanto, não retornará propriedades encontradas em outro lugar na cadeia de protótipo. Essa, no entanto, não parece ser sua solicitação, portanto, presumirei que essa abordagem seja suficiente.
Se você gostaria de ver apenas propriedades enumeráveis , você pode usar
Object.keys
. Isso retornaria a mesma coleção, menos aconstructor
propriedade não enumerável .fonte
Os métodos podem ser inspecionados na cadeia de protótipos do objeto usando as ferramentas de desenvolvedor do navegador (F12):
ou mais diretamente
fonte
Em ES6:
fonte
para mim, a única maneira confiável de obter os métodos da classe de extensão final era fazer assim:
fonte
Estou em um telefone sem ponto-e-vírgula :) mas essa é a ideia geral.
fonte
Você pode simplesmente fazer um loop sobre o protótipo de um construtor e extrair todos os métodos.
fonte
a melhor maneira é:
use 'let' apenas em es6, use 'var' ao invés
fonte
No Chrome é
keys(foo.prototype)
. Devoluções["a", "b"]
.Consulte: https://developer.chrome.com/devtools/docs/commandline-api#keysobject
Edição posterior: Se você precisar copiá-lo rapidamente (para objetos maiores), faça
copy(keys(foo.prototype))
e você o terá na área de transferência.fonte
Obtenha os nomes dos métodos:
Ou obtenha os métodos:
fonte