var parent = function() {
this.name = 'Jack';
this.age = '45';
}
parent.prototype.classify = 'person'
parent.prototype.classify_enumerable = 'person_enumerable'
var myobject = new parent();
Object.defineProperty(myobject, "classify_enumerable", { enumerable: false, value: "classify_enumerable" });
Object.defineProperty(myobject, "enumerable_true", { enumerable: true, value: "enumerable_true" });
Object.defineProperty(myobject, "enumerable_false", { enumerable: false, value: "enumerable_false" });
c(myobject)
// for in 会枚举包括原型链上属性在内的属性全部列举出来
for (var key in myobject) {
c(key + ':' + myobject[key])
}
//propertyIsEnumerable 可以对所有属性判断是否可以枚举
c(myobject.propertyIsEnumerable('enumerable_true'))
c('classify')
c(myobject.propertyIsEnumerable('classify_enumerable'))
//Object.keys 只能枚举非原型链上的key值
c('Object.keys')
c(Object.keys(myobject))
// Ojbect.getOwnPropertyNames列举非原型链上所有属性
c('Object.getOwnPropertyNames')
c(Object.getOwnPropertyNames(myobject))
//in 所有属性只要在myobject上,包括原型链以及非枚举属性,均为true
c('name' in myobject)
c('age' in myobject)
c('classify' in myobject)
c('enumerable_true' in myobject)
c('enumerable_false' in myobject)
//Object.getOwnProperty 所有非原型链属性只要在myobject上,包括非枚举属性,均为true
c('Objece.hasOwnProperty')
c(myobject.hasOwnProperty('name'))
c(myobject.hasOwnProperty('age'))
c(myobject.hasOwnProperty('classify')) //false
c(myobject.hasOwnProperty('enumerable_true'))
c(myobject.hasOwnProperty('enumerable_false'))
//该函数用来简写版本的console.log
function c(pro) {
console.log(pro)
}
打印结果
parent { name: 'Jack', age: '45', enumerable_true: 'enumerable_true' }
name:Jack
age:45
enumerable_true:enumerable_true
classify:person
true
classify
false
Object.keys
[ 'name', 'age', 'enumerable_true' ]
Object.getOwnPropertyNames
[
'name',
'age',
'classify_enumerable',
'enumerable_true',
'enumerable_false'
]
true
true
true
true
true
Objece.hasOwnProperty
true
true
false
true
true
[Finished in 0.1s]