昌鑫号

object.defineproperty()(object.defineproperty()原理)

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.

注意:

此方法应直接在对象构造函数对象上调用,而不是在对象类型的任何实例上调用。

object.defineproperty()原理

四、属性类型:

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

object.defineproperty()原理

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最新内容,希望能帮到您!更多相关内容欢迎关注。

      
上一篇