Object类型

Q1: Object.hasOwnProperty(prop)与Object.propertyIsEnumerable()的区别?

hasOwnProperty(propertyName): 用于检查给定的属性是在当前对象的实例中(而不是在实例的原型中)是否存在。如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。

propertyIsEnumerable(propertyName):
用于检查给定的属性是否能够用for-in或者Object.keys()中列举出来。,如果判断的属性存在于Object对象的原型内,不管它是否可枚举都会返回false。

为什么有不可枚举的属性?主要用途是什么?

2、(这个问题我不会, 求解释~~)
一般用enumerable:false来模拟私有属性.for-in和object.keys()不可以枚举出来

1
2
3
4
5
6
7
8
9
10
11
var o = Object.defineProperties({}, {
p1: { value: 123, enumerable: true },
p2: { value: "abc", enumerable: true },
p3: {
get: function() {
return this.p1 + this.p2
},
enumerable: true,
configurable: true
}
});