Programing

개체의 모든 메서드를 인쇄하는 방법이 있습니까?

crosscheck 2020. 11. 18. 08:34
반응형

개체의 모든 메서드를 인쇄하는 방법이 있습니까?


이 질문에 이미 답변이 있습니다.

JavaScript에서 개체의 모든 메서드를 인쇄하는 방법이 있습니까?


확실한:

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"));

객체 내부를보고 싶다면 모든 객체의 키를 인쇄 할 수 있습니다. 그들 중 일부는 변수가 될 수 있고 일부는 메소드가 될 수 있습니다.

이 방법은 정확하지는 않지만 정말 빠릅니다.

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

다음은 ES6샘플입니다.

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

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

obj = thisES6 기본 매개 변수입니다. Object를 전달하거나 기본값으로 this.

Object.keysObject의 자체 열거 가능한 속성의 배열을 반환합니다 . window객체 위에 [..., 'localStorage', ...'location'].

(param) => ... ES6 화살표 함수입니다.

function(param) {
    return ...
}

암시 적으로 반환됩니다.

Array.filter테스트를 통과 한 모든 요소가 포함 된 새 배열을 만듭니다 ( typeof obj[key] === 'function').

Array.map이 배열의 모든 요소에 대해 제공된 함수를 호출 한 결과로 새 배열을 만듭니다 (return obj[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 함수는 메소드가 프로토 타입에서 상속 된 메소드인지 여부와 함께 메소드 세트를 리턴합니다.

브라우저 / DOM 개체와 같은 컨텍스트에서 제공되는 개체에 이것을 사용하려는 경우 IE에서 작동하지 않습니다.


에서 여기 :

예 1 :이 예에서는 "navigator"개체의 모든 속성과 해당 값을 작성합니다.

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

'내비게이터'를 관심있는 개체로 바꾸면됩니다.

As mentioned by Anthony in the comments section - This returns all attributes not just methods as the question asked for.

Oops! That'll teach me to try and answer a question in a language I don't know. Still, I think the code is useful - just not what was required.


Since methods in JavaScript are just properties that are functions, the for..in loop will enumerate them with an exception - it won't enumerate built-in methods. As far as I know, there is no way to enumerate built-in methods. And you can't declare your own methods or properties on an object that aren't enumerable this way.

참고URL : https://stackoverflow.com/questions/152483/is-there-a-way-to-print-all-methods-of-an-object

반응형