无法为属性或索引器赋值_JavaScript对象的数据属性和访问器属性

Javascript中对象的属性我们已经非常熟悉了,但是对象属性的特性你了解吗?我想多半用过js的人都不太了解,其根本原因是我们平时基本不会用到,除非是写过一些框架和库的,那么今天之所以要提到它是因为目前一些主流的mvvm框架的核心:数据驱动,响应式数据是跟它有关的,想搞懂mvvm框架,对它还是有必要了解一下的。

d2b32325d517baa16d45e7cfbefce7b9.png

与其相关的方法有四个

  • Object.defineProperty(obj,prop,descriptor)
  • Object.defineProperties(obj,props)
  • Object.getOwnPropertyDescriptor(obj,prop)
  • Object.getOwnPropertyDescriptors(obj)

前面两个是用来定义属性特性的,后面两个与之相对,用来获取属性的相关特性,下面我们具体来看一下怎么使用。

数据属性

定义的对象属性,默认情况下有4个特性,只是我们看不到而已

  • Value: 属性对应的值,默认情况下是undefined
  • Writable: 是否可以修改属性的值,默认为true
  • Enumerable:是否可以被枚举,能被for-in循环或者Ojbect.keys()返回属性,默认为true
  • Configurable: 是否可配置,包括能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true

但是通过getOwnPropertyDescriptor方法可以查看(getOwnPropertyDescriptors获取对象所有属性特性)

var obj = { a: 1, b: 2, c: 3 } console.log('a属性特性:', Object.getOwnPropertyDescriptor(obj, 'a'))
ad942a5f71d669f9688f12c9b6a4a06e.png

接下来我们就可以根据业务需求来修改属性的特性了

e1cc85e051055af28f1b6b409c566f65.png

访问器属性

访问器属性才是响应式数据的核心,我们通过设置访问器属性就可以对属性进行监听,其也有4个特性,主要是get和set方法

  • Configurable: 是否可配置,包括能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true
  • Enumerable:是否可以被枚举,能被for-in循环或者Ojbect.keys()返回属性,默认为true
  • Get: 给属性提供一个gettr方法,当属性被访问时会调用该方法,如果没有 getter 则为 undefined
  • Set: 给属性提供一个gettr方法,当重新给属性赋值时会调用该方法,如果没有 setter 则为 undefined
7d503f258fc632f999f56f775d1afd8b.png
f5df195efc49aada4a36f2e8a58974da.png

以上就是基本的用法了,写的不全,我觉得主要是理解和认识有这样的功能吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值