四时宝库

程序员的知识宝库

javascript核心知识(五):面向对象(中)- 数据属性描述符

javascript对象的两种属性描述符

实际上 JavaScript 对象的运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key,以数据属性特征值或者访问器属性特征值为 value。

对象是一个属性的索引结构(索引结构是一类常见的数据结构,我们可以把它理解为一个能够以比较快的速度用 key 来查找 value 的字典)。{writable:true,value:1,configurable:true,enumerable:true}是 value。

为什么有人说“JavaScript 不是面向对象”这样的说法。这是由于 JavaScript 的对象设计跟目前主流基于类的面向对象差异非常大。

可事实上,这样的对象系统设计虽然特别,但是 JavaScript 提供了完全运行时的对象系统,这使得它可以模仿多数面向对象编程范式(JavaScript 中两种面向对象编程的范式:基于类和基于原型),所以它也是正统的面向对象语言。

JavaScript 语言标准也已经明确说明,JavaScript 是一门面向对象的语言,我想标准中能这样说,正是因为 JavaScript 的高度动态性的对象系统。

数据属性描述符

它比较接近于其它语言的属性概念。数据属性具有四个特征。使用getOwnPropertyDescriptor 查看数据属性。

  • value:就是属性的值。
  • writable:决定属性能否被赋值。
  • enumerable:决定 for in 能否枚举出该属性。
  • configurable:决定该属性能否被删除或者改变特征值。
  // 1.对象字面量默认定义
  let obj = {a:'111'}  
  //上面代码中默认定义了四个数据描述符:value writable enumerable configurable
  // 2.自定义数据描述符
  Object.defineProperty(
    {},'a', {value:'222',writable:false,enumerable:false,configurable:false})
	console.log(obj1.a)//111
  obj2.a = '333';
  console.log(obj2.a)//222

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接