object.defineproperty, 什么是object.defineproperty()?不知道小伙伴们今天来看看边肖的分享吧!
一、Object.defineProperty()的定义:
Object.defineProperty()将直接在对象上定义新的属性,或者修改对象的现有属性并返回该对象。
第二,和的区别。运算符或[]运算符:
Object.defineProperty()可以更深入地定义一个对象。它不仅可以操纵属性的值,还可以修改属性的一些属性,比如是否可以修改。当然,值也是属性之一。
三、Object.defineProperty(obj,prop,descriptor)接受3个参数:
要操作的对象。
属性:要操作的属性。
Descriptor: Descriptor object. It contains six attributes: configurable, enumerable, writable, value, acquisition and setting.
注意:
此方法应直接在对象构造函数对象上调用,而不是在对象类型的任何实例上调用。
四、属性类型:
1.数据属性
数据属性包含数据值的位置。在这个位置可以读写值。
数据属性有四个描述其行为的特征:
可配置:是否可以通过delete删除属性,是否可以修改attribute属性(注意是属性),是否可以修改为accessor属性。默认值为true。
可枚举:该属性是否可以被for-in遍历,默认为true。
可写:属性值是否可以修改,默认为真。
值:该属性的数据值。读取属性值时,从这里读取;写入属性值时,将新值保存在此位置。默认值是未定义的。
例如:
let person={}
Person.name //Add a data attribute to people, which is configurable, enumerable and writable. It is true by default.
The value is undefinedperson.name=a//value property is set to a.
如果将configurable设置为false,则除了value和writable之外,其他属性都不能修改(而且它本身也不能更改为true)。如果修改被忽略,严格模式将给出一个错误。
当configurable为false时,writeable为true,并且可以修改为false。如果writeable为false,对true的修改也将被忽略,并且严格模式将给出一个错误。
Object.defineProperty(person,name,{ configurable:false })对象。定义属性(人员,姓名,{ value:b })控制台。日志(人。名称)//b可配置为假的,
person.name=c //errorObject.defineProperty(person, name, { writable: true}) //error
2.访问者属性
访问器属性不包含数据值,但包含一对getter和setter函数(它们不需要同时存在)。访问器属性必须通过Object.defineProperty定义。访问器属性具有以下四个特征:
可配置:属性是否可以通过删除删除,属性特征(注意是特征)是否可以修改,是否可以修改为数据属性。默认值为true。
可枚举:该属性是否可以被for-in遍历,默认为true。
Get:读取属性时调用的函数。默认值是未定义的
Set:写入属性时调用的函数。默认值是未定义的。
五、数据属性和访问器属性的转换:
数据属性-访问者属性
将get或Set属性设置为data属性,value和可写属性将被丢弃,该属性将成为访问器属性。
访问者属性-数据属性
将value或writable属性设置为accessor属性,get和Set属性将被丢弃,该属性将成为数据属性。
注意:只有当configurable为true时,您才能相互转换,即使当数据属性中的configurable为false时,您可以修改value或writable。
不能通过仅设置值或可写来更改数据属性的访问器属性。
object.defineproperty,以上就是本文为您收集整理的object.defineproperty最新内容,希望能帮到您!更多相关内容欢迎关注。