Есть ли способ напечатать все методы объекта в JavaScript?
Есть ли способ напечатать все методы объекта?
Ответ 1
Конечно:
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"));
Ответ 2
Если вы просто хотите посмотреть, что находится внутри объекта, вы можете распечатать все ключи объектов. Некоторые из них могут быть переменными, некоторые - методами.
Метод не очень точен, однако он очень быстрый:
console.log(Object.keys(obj));
Ответ 3
Здесь сообщение JS reflection. Он должен делать то, что вы ищете.
Ответ 4
Вот образец ES6
.
// Get the Object methods names:
function getMethodsNames(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function');
}
// Get the Object methods (functions):
function getMethods(obj = this) {
return Object.keys(obj)
.filter((key) => typeof obj[key] === 'function')
.map((key) => obj[key]);
}
obj = this
параметр ES6 по умолчанию, вы можете передать объект или он будет по умолчанию для this
.
Object.keys
возвращает массив из Object
собственных перечислимых свойств. Над window
Object он вернет [..., 'localStorage',...'location']
.
(param) =>...
является функцией стрелки ES6, это сокращение для
function(param) {
return ...
}
с неявным возвратом.
Array.filter
создает новый массив со всеми элементами, которые проходят тест (typeof obj[key] === 'function'
).
Array.map
создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве (возвращает obj[key]
).
Ответ 5
Возьмите gander в этом коде: -
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.
Ответ 6
Из здесь:
Пример 1: В этом примере выписываются все свойства объекта "навигатор", а также их значения:
for (var myprop in navigator){
document.write(myprop+": "+navigator[myprop]+"<br>")
}
Просто замените "навигатор" на любой объект, который вас интересует, и вам должно быть хорошо идти.
Как упоминалось Энтони в разделе комментариев - Это возвращает все атрибуты не только как методы, заданные для вопроса.
Oops! Это научит меня пытаться ответить на вопрос на языке, который я не знаю. Тем не менее, я думаю, что код полезен - просто не то, что требовалось.
Ответ 7
Так как методы в JavaScript - это просто свойства, которые являются функциями, цикл for..in перечисляет их с исключением - он не будет перечислять встроенные методы. Насколько я знаю, нет способа перечислить встроенные методы. И вы не можете объявлять свои собственные методы или свойства для объекта, которые не перечислены таким образом.