首页 > 其他分享 >JS中的 Object.defineProperty

JS中的 Object.defineProperty

时间:2022-11-29 14:32:23浏览次数:53  
标签:Object JS person 枚举 defineProperty true 属性

Object.defineProperty

​Object.defineProperty()​​ 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。


语法:

Object.defineProperty(obj,prop,descriptor);

obj,要定义属性的对象;

prop,要定义或修改的属性的名称;

descriptor,要定义或修改的属性描述符,{} 形式,有6个描述符,如下:

-- value, 是当前属性的值,可为任意有效JS值;默认值:undefined; 

-- configurable,为 true 时,当前属性可被删除;默认值: false;

-- enumerable,为 true 时,当前属性可被枚举;默认值: false; 

-- writable,为 true 时,当前属性的 value 才能被修改;默认值:false;

-- get,属性的 getter 函数,不传参,会传入 this 对象,函数返回值是当前属性的值;默认值:undefined; 

-- set, 属性的 setter 函数,调用此函数修改当前属性的值,接受参数,会传入赋值时的 this 对象;

返回值:被传递给函数的对象;


和 “=” 相比较

为 javascript 对象新增或修改属性有两种方式:

1) 使用 “ = ” ;

2) 使用 Object.defineProperty();

let person = {};
person.name = 'Jack';
Object.defineProperty(person,'gender',{
value: 'male'
});
console.log(person); // {name: 'Jack', age: 18, gender: 'male'}

JS中的 Object.defineProperty_对象属性修改

使用 "=" 赋值的 name 属性颜色深,使用 Object.defineProperty() 方法赋值的 gender 颜色浅,必有鬼;

使用 ​​Object.getOwnPropertyDescriptors()​​ 查看 person.name 和 person.gender 这两属性的属性描述符时,会发现不一样; 

Object.getOwnPerpertyDescriptors() 方法,获取一个对象的所有自身属性的描述符;

console.log(Object.getOwnPropertyDescriptors(person));

JS中的 Object.defineProperty_对象属性修改_02

使用 “=” 赋值时:

属性的 ​​writable​​​、​​enumerable​​​、​​configurable ​​ 这三个属性描述符都是 true ,分别代表:可被修改、可被枚举和可被删除;

使用 Object.defineProperty() 方法赋值时:

属性的这三个属性描述符都是 false,也就是说当前属性不能被修改、不可被枚举(遍历)也不可被删除;但属性描述符的状态都是可以修改的;

试验一下:修改属性,确实不能修改;

JS中的 Object.defineProperty_对象属性修改_03

试验一下:枚举属性,确实不能枚举,只显示了可被枚举的 name 属性;

JS中的 Object.defineProperty_对象属性修改_04

试验一下:删除属性,确实不能删除;

JS中的 Object.defineProperty_javascript_05


代码改一下,两个就等价了;

let person = {};
person.name = 'Jack';
Object.defineProperty(person,'gender',{
value: 'male',
writable:true,
enumerable:true,
configurable:true
});
console.log(person);
console.log(Object.getOwnPropertyDescriptors(person));

JS中的 Object.defineProperty_javascript_06

同时,也可以被修改、被枚举和可以被删除了。

JS中的 Object.defineProperty_javascript_07






标签:Object,JS,person,枚举,defineProperty,true,属性
From: https://blog.51cto.com/ahuiok/5895003

相关文章

  • Python 使用json存储数据
    一、前言很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。用户关闭......
  • JSTL c标签,fn标签,fmt标签 - 生活在爪洼岛上
    jstl是sun定义的标准,由apache实现,所以要下载jar包的话去apache,要看api文档的话,去sun,API文档在此:​​http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html​......
  • JS数组方法汇总 array数组元素的添加和删除
    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^vararr=newArray();arr[0]="aaa";arr[1]="bbb......
  • 【JS】395-重温基础:事件
    本文是 重温基础 系列文章的第二十篇。这是第三个基础系列的第一篇,欢迎持续关注呀!重温基础 系列的【初级】和【中级】的文章,已经统一整理到我的【Cute-JavaScript】(http......
  • Spring mvc 返回json格式 - 龙企阁
    第一次使用springmvc,在此也算是记录一下以防忘记,希望有经验的朋友指出不足的地方一、使用maven管理jar。<dependency><groupId>org.codehaus.jackson</groupId><artif......
  • xml_解析_Jsoup_Document对象以及Element对象
    xml_解析_Jsoup_Document对象Document:文档对象,代表内存中的dom树获取Element对象getElementById(Stringid):根据id属性值获取唯一的element对象ge......
  • uniapp 配置钉钉小程序package.json文件
    {"uni-app":{"scripts":{"mp-dingtalk":{"title":"钉钉小程序","env":{"UNI_PLATFOR......
  • js操作Json数据,JSON对象与字符串转化 - jack_Meng
    一、JSON格式数据介绍书写AJAX的时候,经常需要解析从服务器返回的一串字符串,这里简单介绍服务器返回字符的两种格式,及JS对它们的解析方法。JSON即JS对象标记(Java​ScriptOb......
  • 使用Javascript/jQuery将javascript对象转换为json格式数据
    Javascript自带的eval()函数能够将json数据转换成Javascript对象。但是,却没有提供将Javascript对象序列化为json格式的函数。varjson='{"name":"John"}';varobj=eva......
  • 【JS】379- 教你玩转数组 reduce
    reduce是数组迭代器(https://jrsinclair.com/articles/2017/javascript-without-loops/)里的瑞士军刀。它强大到您可以使用它去构建大多数其他数组迭代器方法,例如​​.map......