簡體   English   中英

如何獲取對象的方法?

[英]How to get an object's methods?

是否有從 object 獲取所有方法的方法或屬性? 例如:

function foo() {}
foo.prototype.a = function() {}
foo.prototype.b = function() {}

foo.get_methods(); // returns ['a', 'b'];

更新: Jquery 中是否有類似的方法?

謝謝你。

function getMethods(obj)
{
    var res = [];
    for(var m in obj) {
        if(typeof obj[m] == "function") {
            res.push(m)
        }
    }
    return res;
}

請記住,技術上 javascript 對象沒有方法。 它們具有屬性,其中一些可能是 function 對象。 這意味着您可以像枚舉屬性一樣枚舉 object 中的方法。 這(或接近此的東西)應該起作用:

var bar
for (bar in foo)
{
    console.log("Foo has property " + bar);
}

這有一些復雜性,因為對象的某些屬性不可枚舉,因此您將無法在 object 上找到每個function。

您可以使用console.dir(object)將該對象屬性寫入控制台。

在現代瀏覽器中,您可以使用Object.getOwnPropertyNames來獲取 object 上的所有屬性(可枚舉和不可枚舉)。 例如:

function Person ( age, name ) {
    this.age = age;
    this.name = name;
}

Person.prototype.greet = function () {
    return "My name is " + this.name;
};

Person.prototype.age = function () {
    this.age = this.age + 1;
};

// ["constructor", "greet", "age"]
Object.getOwnPropertyNames( Person.prototype );

請注意,這僅檢索own-properties ,因此它不會返回在原型鏈上的其他位置找到的屬性。 但是,這似乎不是您的要求,因此我認為這種方法就足夠了。

如果您只想查看可枚舉的屬性,則可以改用Object.keys 這將返回相同的集合,減去不可枚舉的constructor屬性。

可以使用瀏覽器的開發工具 (F12) 在 object 的原型鏈中檢查這些方法:

  console.log(yourJSObject);

或更直接地

  console.dir(yourJSObject.__proto__);

在 ES6 中:

let myObj   = {myFn : function() {}, tamato: true};
let allKeys = Object.keys(myObj);
let fnKeys  = allKeys.filter(key => typeof myObj[key] == 'function');
console.log(fnKeys);
// output: ["myFn"]

最好的方法是:

let methods = Object.getOwnPropertyNames(yourobject);
console.log(methods)

僅在 es6 中使用 'let',改為使用 'var'

var funcs = []
for(var name in myObject) {
    if(typeof myObject[name] === 'function') {
        funcs.push(name)
    }
}

我正在使用沒有分號的電話:) 但這是一般的想法。

對我來說,獲得最終擴展 class 方法的唯一可靠方法是這樣做:

function getMethodsOf(obj){
  const methods = {}
  Object.getOwnPropertyNames( Object.getPrototypeOf(obj) ).forEach(methodName => {
    methods[methodName] = obj[methodName]
  })
  return methods
}
var methods = [];
for (var key in foo.prototype) {
    if (typeof foo.prototype[key] === "function") {
         methods.push(key);
    }
}

您可以簡單地遍歷構造函數的原型並提取所有方法。

在 Chrome 中是keys(foo.prototype) 返回["a", "b"]

請參閱: https://developer.chrome.com/devtools/docs/commandline-api#keysobject 在此處輸入圖像描述

稍后編輯:如果您需要快速復制它(對於更大的對象),請執行copy(keys(foo.prototype)) ,您將在剪貼板中擁有它。

獲取方法名稱:

var getMethodNames = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    }));
};

或者,獲取方法:

var getMethods     = function (obj) {
    return (Object.getOwnPropertyNames(obj).filter(function (key) {
        return obj[key] && (typeof obj[key] === "function");
    })).map(function (key) {
        return obj[key];
    });
};

暫無
暫無

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

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