对象实例的属性和方法
-
hasOwnProperty 指出一个对象是否有制定名称的属性
-
constructor 保存了当前对象的构造函数
-
isPrototypeOf 判断要检查的原型链对象是否存在于指定的对象实例中。。注意这里必须要是原型链,才能检查的到
-
prototypeIsEnumerable 判断给定的属性是否可以通过for in 给枚举出来
-
toLocalString 根据代码的执行环境返回对象的字符串
- toString
-
valueOf 返回对象的原始值
属性的类型
js中属性有两种类型,分别是数据属性和访问器属性。
- 数据属性可以理解为平时定义对象时赋予的属性,它可以进行读写。es5中定义了一些特性用来描述属性的各种特征,这些特性是内部值,不能直接访问到,通过两个方括号来进行表示。 特性有默认值,要修改默认值,必须使用ES5定义的Object.defineProperty来修改。
- 访问器属性跟上面的区别在于它没有数据属性的[[Writable]]和[[Value]]特性,而拥有一对getter setter函数
数据属性有4个描述其特征的特性
-
[[Configurable]] 表示是否可以用delete操作符来删除属性 ,默认为true
-
[[Enumerable]]表示能否通过for in 枚举出属性,默认true
-
[[Writable]] 表示属性是否可以被修改,默认为true
-
[[Value]] 表示属性的值
访问器属性
-
getter 红线这里需要给个返回值, 因为getter的默认返回值为undefined
-
访问器属性可以被重写
-
访问器属性不能赋予writable 和value属性
-
setter
- 严格模式下 必须set get同时设置
- 非严格模式下,只设置get,则属性是只读的,只设置set 则属性无法读取
-
Object.getOwnPropertyDescriptor 需要两个参数,返回的是属性的特性
Object的方法
- 对象创建型方法
Object.create() - 对象特性型方法
- Object.defineProperty
- Object.defineProperties
- Object.getOwnPropertyDescriptor
- 属性获取型方法
- Object.key()
- Object.getOwnPropertyNames()
- 对象限制型方法
- Object.preventExtensions() /Object.isExtensible()
- Object.seal() /Object.isSealed()
- Object.freeze() / Object.isFrozen()
-
Object.create() 通过传递原型来创建新的对象,当不传递原型的时候,会如下图
-
第二个参数 要传值的话,必须要按照es5的特性传值模式,如果不显示声明属性是可编辑的,那么属性的默认值就是不可编辑
-
Object.keys 枚举出只是自身属性的键
-
上面提到的枚举特性在这里也是有效的
-
-
getOwnPropertyNames 来获取自身所有属性的键名
-
Object.preventExtensions 限制对象的扩展, 设置之后,无法添加新的属性,但是已存在的属性可以被删除。 可以在对象的原型上添加属性
-
Object.seal 将对象密封,无法添加/删除已有属性,也无法修改enumerable writable configurable ,但是可以修改value
-
Object.freeze 冻结对象,对象无法添加/修改/删除属性,也无法修改特性值,即这个对象无法被修改,但是通过原型还是可以的