[英]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.