Skip to content

属性描述对象章节的几处错误 #41

@feixueliantian

Description

@feixueliantian

阮老师您好,我在阅读 属性描述对象 这一章时,发现了几处错误。

  1. Object.getOwnPropertyDescriptor() 部分有一处大小写拼写错误,建议将代码后面说明文字中的 Obj 改成 obj。以下引用您的原文:
var obj = { p: 'a' };

Object.getOwnPropertyDescriptor(obj, 'toString')
// undefined

上面代码中,toStringObj对象继承的属性,Object.getOwnPropertyDescriptor无法获取。

  1. Object.defineProperty(),Object.defineProperties() 部分有一处描述不清楚,文中说 Object.defineProperties()的第三个参数,这个函数只有两个参数啊,您可能是想说 Object.defineProperty()的第三个参数。以下引用您的原文:
`Object.defineProperty()`和`Object.defineProperties()`的第三个参数,是一个属性对象。它的writable、configurable、enumerable这三个属性的默认值都为false。
  1. 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 时用了一个空的属性描述对象,就可以看到各个元属性的默认值。

  1. 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions