php property 获取,JavaScript中如何获取和设置property属性代码详解
JavaScript中对象的property有三个属性:
1.writable。该property是否可写。
2.enumerable。当使用for/in语句时,该property是否会被枚举。
3.configurable。该property的属性是否可以修改,property是否可以删除。
在ECMAScript 3标准中,上面三个属性的值均为true且不可改:新建对象的property是可写的、可被枚举的、可删除的;而在ECMAScript 5标准中,可通过property的描述对象(property descriptor)来对这些属性进行配置和修改。
如果将property的值信息也作为property的属性来看的话,对象中的property拥有四个属性:value、writable、enumerable和configurable。
对于用getter和setter方法来定义的property,由于其没有writable属性(property是否可写取决于setter方法是否存在),因此这种property也有四个属性:get、set、enumerable和configurable — get和set属性的值为function。
获取对象property的属性
ECMAScript 5标准中,可以通过Object.getOwnPropertyDescriptor()来获取对象自身某个property的属性信息:var o = {x:1};
var a = Object.create(o);
a.y = 3;
console.log(Object.getOwnPropertyDescriptor(a, "y"));//Object {configurable=true, enumerable=true, writable=true, value=3}
console.log(Object.getOwnPropertyDescriptor(a, "x"));//undefined
可以看到,如果property不存在或者property继承自原型对象,则返回undefined。
设置对象property的属性
ECMAScript 5标准中,可以通过Object.defineProperty()来设置对象自身某个property的属性:Object.defineProperty(a, "y", {
value:3,
writable:true,
enumerable:false,
configuration:true
});
console.log(a.propertyIsEnumerable("y"));//false
如果设置的property是从原型对象中继承而来的,那么JavaScript将在对象自身中创建一个同名的property,这与赋值操作的相关行为一致:Object.defineProperty(a, "x", {
value:1,
writable:true,
enumerable:false,
configuration:true
});
console.log(a.propertyIsEnumerable("x"));//false
console.log(o.propertyIsEnumerable("x"));//true
除了修改property的属性,还可以将property改为用getter或setter访问:Object.defineProperty(a, "y", {
get:function(){return 42;}
});
console.log(a.y);//42
在使用Object.defineProperty()时,property描述对象中的属性值可以部分忽略,当属性值有所忽略时,JavaScript中的处理规则如下:
如果property是新建的,则所有忽略的属性值均为false或undefined。
如果property已存在,则所有忽略的属性值维持原样不变。
批量设置对象property的属性
如果需要一次性设置多个property的属性,可以使用Object.defineProperties()语句。该语句将返回修改后的对象。Object.defineProperties(a, {
"y":{value:79, writable:true, enumerable:true, configurable:true},
"z":{value:99, writable:true, enumerable:true, configurable:true}
});
console.log(a);//Object {y=79, z=99}
property属性设置规则
当对property属性进行修改时,必须遵循以下规则。如果违反规则,JavaScript将报TypeError错误:
如果对象不是extensible的,则只能修改已有property的属性,无法添加新的property。
如果property的configurable属性为false,则无法修改configurable和enumerable属性的值,对于writable属性,可以将其从true改为false,但无法将其从false改为true。如果property由getter和setter定义,则getter和setter方法无法被修改。
如果property的configurable属性和writable属性均为false,则property值不可改。如果property的writable属性为false,但其configurable属性为true,则property值依然可以修改。
php property 获取,JavaScript中如何获取和设置property属性代码详解相关推荐
- Javascript中this指向丢失原因及解决办法详解
大家都知道JS中的this关键字通常出现在函数或者方法中,用来指向调用该函数或者方法的对象.但是在很多时候this的指向却并不总是如我们所愿,这一篇文章就一起来看看到底该如何判断this所指向的对象, ...
- signature=b8cae5ae994df93c3fedf622c2a51ac5,javascript中的Base64、UTF8编码与解码详解
Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充 ...
- 教你用 JavaScript 设计一个 Neumorphism 风格的数字时钟 (代码详解)
时钟是我们用来测量时间的装置.如果使用得当,时钟对于任何 UI 都是有用的元素.时钟可用于以时间为主要关注点的网站,例如一些预订网站或一些显示火车.公共汽车.航班等到达时间的应用程序.时钟基本上有两种 ...
- mysql datediff函数怎么用_SQL中datediff函数怎么用?(代码详解)
在SQL Server中,可以使用T-SQL DATEDIFF()函数返回两个日期之间的差异.它适用于任何可以解析为time.date.smalldatetime.datetime.datetime2 ...
- 在PyTorch中进行双线性采样:原理和代码详解
↑ 点击蓝字 关注视学算法 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/257958558 编辑丨极市平台 在pytorch中的双线性采样(Bilinear Sa ...
- 一对一视频聊天系统中三种聊天方式的功能应用代码详解
在一对一视频聊天系统中,聊天是必不可少的沟通方式,主播和用户可以根据多种方式进行聊天,其中视频聊天和语音聊天是最为广泛的应用方式,但文字聊天也是直播系统当中必不可少的功能模块. private Rec ...
- 深入理解NLP中LayerNorm的原理以及LN的代码详解
想来大厂字节跳动的同学不要错过这次2024届的暑期实习招聘,「2023年4月30日」就截止了: ❤️ 粉丝专属内推码:JYT8RH3 ❤️
- java8 方法引用详解_Java8中如何通过方法引用获取属性名详解
前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. ...
- js 条码枪扫描_使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
下面通过实例代码给大家介绍js扫码枪扫描条形码的实现方法,具体代码如下所示: var keycode = ""; var lastTime=null,nextTime; var l ...
最新文章
- 皮一皮:到底谁才是渣王...
- Android异步下载网络图片(其一:Handler)
- php适用于什么服务器,php – 找不到laravel类(适用于localhost但不适用于DO服务器)...
- 用函数刷新页面内容比刷新页面要好
- 文档管理 linux,Linux 文档管理
- 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
- “21天好习惯”第一期-14
- chainmaker-go-sdk get cert hash failed, get cert hash failed, send QUERY_SYSTEM_CONTRACT failed
- c# PropertyGrid 自定义属性排序
- 头歌(educoder)实训作业题目及答案分享 ——1-1 Java入门 - Java入门基础
- 黑苹果简单驱动 MultiBeast用法基础篇
- 分享 - 怎样实习才能成长最快
- 工作中,掌握这四个说话技巧,再也不用担心自己不会说话
- POI-获取Excel中合并单元格问题
- Java程序是怎么运行的?
- C-kermit使用
- html5的download下载标签
- 施一公直播首秀来了!解答读博困惑都说了啥?
- 通达OA精灵提示“库没有注册”无法登录处理方法
- 计算机网络考试多选题汇总Ⅰ(答案见文末)