获取一个对象的所有属性和方法实例有多种方式,下面将介绍其中两种常用的方法。
1. 使用 Object.getOwnPropertyNames()
和 Object.getOwnPropertySymbols()
Object.getOwnPropertyNames()
可以获取对象自有的所有属性名,包括不可枚举的属性(例如,通过 Object.defineProperty()
定义的属性);而 Object.getOwnPropertySymbols()
可以获取对象自有的所有 Symbol 类型的属性名。
组合使用这两个方法可以获取一个对象的所有属性和方法实例。
const obj = {
foo: 'bar',
[Symbol('baz')]: 123,
};
const properties = Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj));
console.log(properties); // ["foo", Symbol(baz)]
上面的代码中,定义了一个对象 obj
,其中包含一个属性 foo
和一个 Symbol 类型的属性 [Symbol('baz')]
。使用 Object.getOwnPropertyNames()
和 Object.getOwnPropertySymbols()
依次获取对象的所有属性名,再将它们合并成一个数组 properties
。
2. 使用 for...in
循环遍历对象
另一种获取对象所有可枚举属性的方式是使用 for...in
循环遍历对象。但需要注意的是,这种方式只能获取对象可枚举的属性,无法获取不可枚举的属性。
function Person(name) {
this.name = name;
this.age = 18;
}
Person.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
const person = new Person('Tom');
for (const prop in person) {
console.log(prop); // "name", "age", "sayHello"
}
上面的例子中,定义了一个 Person
构造函数和一个实例 person
,通过往 Person.prototype
中添加方法 sayHello
,使得该方法成为实例 person
的一个属性。使用 for...in
循环遍历实例 person
,输出其所有可枚举属性的名称。
需要注意的是,在遍历对象属性时,需要排除一些不需要的属性,例如 Object.prototype
中的属性或者 null
对象的属性,可以使用如下方式进行排除:
for (const prop in obj) {
if (obj.hasOwnProperty(prop)) {
// 处理对象属性
}
}
上面的代码中,在每次遍历对象属性前,先通过 hasOwnProperty()
方法判断该属性是否为对象自有属性,如果是,则处理该属性。这样可以排除对象原型链上的属性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS获得一个对象的所有属性和方法实例 - Python技术站