1.for-in
for-in
遍历所有能通过对象访问的,可枚举的属性,包括实例属性和原型属性,引伸为defineProperty
的[[Enumerable]]
属性.
ES5中将constructor
和prototype
属性的[[Enumerable]]
设为false
,即不可枚举,但不适用于所有浏览器。
function Person(){}
Person.prototype.name = 'hello';
var p = new Person();
p.age = 18;
for(var i in p){
console.log(i) //age name
}
//其中age是实例属性,name是原型属性
2.Object.keys()
ES5中的Object.keys()
可以取得对象上所有可枚举的实例属性,返回值是包含所有可枚举属性的字符串数组。
function Person(){}
Person.prototype.name = 'hello';
Person.prototype.addr = 'China';
var p = new Person();
p.age = 18;
console.log(Object.keys(Person.prototype)) //["name", "addr"]
//返回Person原型对象可枚举的实例属性,constructor属性不可枚举
3.Object.getOwnPropertyNames()
获取一个对象的所有实例属性,不论该属性是否可枚举。
function Person(){}
Person.prototype.name = 'hello';
Person.prototype.addr = 'China';
var p = new Person();
p.age = 18;
Object.getOwnPropertyNames(Person.prototype) //["constructor", "name", "addr"]
//返回的数组中,constructor为不可枚举属性,name和addr属于可枚举属性。