[英]How to show all properties and methods of an object in javascript?
[英]Javascript - List all properties/methods from an object
我知道可以使用Object.keys()
方法列出對象文字的鍵。 但是通過構造函數創建的對象呢?
function Foo () {}
Foo.prototype.bar = 'bar';
Foo.prototype.baz = 'baz';
var foo = new Foo();
console.log(Object.keys(foo).join(', ')); // returns ''
console.log(Object.getOwnPropertyNames(foo).join(', ')); // returns ''
Object.keys
將僅擁有自己的可枚舉屬性,而getOwnPropertyNames
將僅擁有自己的屬性(即使不可枚舉)。 他們都不會給你從原型繼承屬性的名稱(或它的原型,或者它的 ...)。
如果您只關心可枚舉的屬性, 請參見trincot的答案 。
如果您想全部使用它們,¹即使它們不是無法枚舉的,也必須遍歷原型鏈:
function getAllPropertyNames(obj) { var result = []; while (obj && obj !== Object.prototype) { result.push.apply(result, Object.getOwnPropertyNames(obj)); obj = Object.getPrototypeOf(obj); } return result; } function Foo () {} Foo.prototype.bar = 'bar'; Foo.prototype.baz = 'baz'; var foo = new Foo(); console.log(getAllPropertyNames(foo));
在該示例中,當我們到達Object.prototype
時,我停了Object.prototype
,但是您當然可以繼續操作,直到打入null
為止:
function getAllPropertyNames(obj) { var result = []; while (obj) { result.push.apply(result, Object.getOwnPropertyNames(obj)); obj = Object.getPrototypeOf(obj); } return result; } function Foo () {} Foo.prototype.bar = 'bar'; Foo.prototype.baz = 'baz'; var foo = new Foo(); console.log(getAllPropertyNames(foo));
¹ “如果要全部使用它們……”請注意,在上文中,我們並未嘗試獲取由Symbols而不是字符串命名的屬性。 如果這樣做,我們將使用getOwnPropertySymbols
以及getOwnPropertyNames
。
您可以使用for
循環:
function Foo () {} Foo.prototype.bar = 'bar'; Foo.prototype.baz = 'baz'; var foo = new Foo(); for (var key in foo) console.log(key, foo[key]);
請注意,這有局限性。 某些屬性可以設為不可枚舉,然后將不包括在內。 例如,數組的length
屬性就是這種情況:
var a = [1, 2]; for (var key in a) console.log(key, a[key]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.