事实上,JavaScript 对象的运行时是一个“属性的集合”。 属性使用字符串或符号作为键,使用数据属性属性值或访问器属性属性值作为值。
对象是一个属性的索引结构(索引结构是一种常见的数据结构,我们可以将其理解为可以使用键以相对较快的速度查找值的字典)。 {可写:truejavascript 获取属性,值:1javascript 获取属性,可配置:true,可枚举:true}是值。
为什么有人说“JavaScript不是面向对象”。 这是因为JavaScript的对象设计与目前主流的基于类的面向对象有很大不同。
但事实上,这样的对象系统设计看起来非常好,而且 JavaScript 提供了完整的运行时对象系统,这使得它能够模仿大多数面向对象的编程范式(JavaScript 中有两种面向对象的编程范式:基于类和基于原型) ),所以它也是一种正统的面向对象语言。
JavaScript语言标准也明确指出JavaScript是一种面向对象的语言。 我认为标准可以这么说是因为 JavaScript 具有高度动态的对象系统。
数据属性描述符
它与其他语言的属性概念比较接近。 数据属性有四个特征。 使用 getOwnPropertyDescriptor 查看数据属性。
// 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