-
Notifications
You must be signed in to change notification settings - Fork 881
Closed
Description
阮老师您好,我在阅读 属性描述对象 这一章时,发现了几处错误。
- Object.getOwnPropertyDescriptor() 部分有一处大小写拼写错误,建议将代码后面说明文字中的
Obj
改成obj
。以下引用您的原文:
var obj = { p: 'a' }; Object.getOwnPropertyDescriptor(obj, 'toString') // undefined
上面代码中,
toString
是Obj
对象继承的属性,Object.getOwnPropertyDescriptor
无法获取。
- Object.defineProperty(),Object.defineProperties() 部分有一处描述不清楚,文中说
Object.defineProperties()
的第三个参数,这个函数只有两个参数啊,您可能是想说Object.defineProperty()
的第三个参数。以下引用您的原文:
`Object.defineProperty()`和`Object.defineProperties()`的第三个参数,是一个属性对象。它的writable、configurable、enumerable这三个属性的默认值都为false。
- Object.defineProperty(),Object.defineProperties() 部分有一处属性名有歧义,代码中使用的是
foo
属性名,而下面的说明文字里面使用的是obj.p
。以下引用您的原文:
var obj = {}; Object.defineProperty(obj, 'foo', {}); Object.getOwnPropertyDescriptor(obj, 'foo') // { // value: undefined, // writable: false, // enumerable: false, // configurable: false // }
上面代码中,定义
obj.p
时用了一个空的属性描述对象,就可以看到各个元属性的默认值。
- Object.prototype.propertyIsEnumerable() 部分有一个知识点有错误,从您描述来看,
obj.propertyIsEnumerable('toString')
之所以返回false
,是因为obj.toString
属性是不可遍历的。而实际情况是,obj.propertyIsEnumerable
方法只能检测实例本身的属性是否可遍历,对于继承的属性,不管是否可遍历,一律返回false
。以下引用您的原文:
实例对象的
propertyIsEnumerable
方法返回一个布尔值,用来判断某个属性是否可遍历。var obj = {}; obj.p = 123; obj.propertyIsEnumerable('p') // true obj.propertyIsEnumerable('toString') // false
上面代码中,
obj.p
是可遍历的,而继承自原型对象的obj.toString
属性是不可遍历的。
Metadata
Metadata
Assignees
Labels
No labels