概述
属性描述对象,是用来描述一个对象的属性的行为,控制它的行为。
|
|
|
|
Object.getOwnPropertyDescriptior
读出对象自身属性的属性描述对象
|
|
#####Object.defineProperty(),Object.defineProperties()
该方法允许通过定义属性描述对象,来定义或修改一个属性,然后返回修改后的对象。它的格式如下。这两个方法有性能损耗,不能大量使用。
|
|
|
|
可枚举性
只有可枚举属性,才会被for…in循环遍历,同时还规定原生继承的属性都是不可枚举的。
可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in
循环之中。具体来说,如果一个属性的enumerable
为false
,下面三个操作不会取到该属性。
|
|
|
|
可配置性configurable
当configurable为false时,value,writable,enumerable,configurable都不能修改了
writable从true改为false时是允许的,反过来就报错
12345var o = Object.defineProperty({}, 'p', {writable: true,configurable: false});Object.defineProperty(o,'p', {writable: false})至于
value
,只要writable
和configurable
有一个为true
,就允许改动。1234567var o2 = Object.defineProperty({}, 'p', {value: 1,writable: false,configurable: true});Object.defineProperty(o2,'p', {value: 2})o2.p //2用var声明变量时,configurable默认为flase,说明用var声明的变量不能用delete删除,而var声明对象就默认为true,可以用delete删除(
delete
只能删除对象的属性)1234567var a =2Object.getOwnPropertyDescriptor(this,'a')//{value: 2, writable: true, enumerable: true, configurable: false}--------var o={a:1}Object.getOwnPropertyDescriptor(o,'a')//{value: 1, writable: true, enumerable: true, configurable: true}
Object.getOwnPropertyNames()
Object.getOwnPropertyNames
方法返回直接定义在某个对象上面的全部属性的名称,而不管该属性是否可枚举。
|
|
Object.prototype.propertyIsEnumerable()
来判断一个属性是否可枚举
|
|
存取器
存取器提供的是虚拟属性,即该属性的值不是实际存在的,而是每次读取时计算生成的。
注:取值函数getter不接受参数(对象也不能有与取值函数同名的属性),存值函数只接受一个参数(即属性的值)。
|
|
|
|
上面就是mvvm框架的ViewModel业务逻辑。MVVM是Model-View-ViewModel的简写,视图(用户界面)和模型(数据)的双向映射。(缺点,用户频繁改动,cpu消耗很大)
Object.preventExtensions() & Object.isExtensible()
extension扩展,阻止扩展。使一个对象无法再添加新的属性(不能增加可删除)
extensible 可扩展的。检查是否可以为一个对象添加属性
|
|
Object.seal() & Object.isSealed
seal:密封 ,既不能添加也不能删除旧属性,(本质就是把configurable改为false,所以writable可以从true改为false,但是反过来不行)
属性对象的value是由writable决定的
|
|
Object.freeze() & Object.isFrozen()
不能添加,不能删除,不能更改。相当于固定住一个对象,变成常量。