javascript的Object对象的defineProperty和defineProperties
Object的属性
查看官网:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object 第一段代码:
var person={};
Object.defineProperty(person,'name',{
configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
//writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
//value:'huang', //对象属性的默认值,默认值为undefined
set:function(newValue){
this.name=newValue;
},
get:function(){
return this.name;
}
}); 当get,set出现的时候不能出现value和writable,
否则报错:Uncaught TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute, #<Object>
at Function.defineProperty (<anonymous>)
at <anonymous>:: 第二段代码:
var waterfall={};
Object.defineProperty(waterfall,'name',{
configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
//writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
//value:'huang', //对象属性的默认值,默认值为undefined
set:function(newValue){
this.name=newValue;
},
get:function(){
return "Namess"+this.name;
}
});
问题:这段代码会报错,因为在set和get函数里出现了this.name= 和 return 里有this.name
导致一直循环递归无法停止,才报错的。
类似于:
function a() {
a();
}
调用a,会无限循环。 解决办法是:
var waterfall={};
Object.defineProperty(waterfall,'name',{
configurable:true,//能否使用delete、能否修改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true
//writable:true,//对象属性是否可修改,flase为不可修改,默认值为true
//value:'huang', //对象属性的默认值,默认值为undefined
set:(newValue)=>{
this.name=newValue;
},
get:()=>{
return "Namess"+this.name;
}
}); Object.defineProperties(object, props)
参数
object: 定义的对象
props: 添加的属性, key和 value 分别Object.defineProperty 中的第二和第三个参数。
例子: let waterfall={};
Object.defineProperties(waterfall,{
name:{
configurable:true,
enumerable:true,
set:(val)=>{
this.name=val
},
get:()=>{
return this.name
}
},
age:{
configurable:true,
enumerable:true,
set:(val)=>{
this.age=val
},
get:()=>{
return this.age
}
}
}) Object的6个属性:
configurable,enumerable,writable,value,set,get。 Object.observe已经被废弃。
Object.keys(waterfall) //[ 'name', 'age' ]
javascript的Object对象的defineProperty和defineProperties的更多相关文章
- javascript ES5 Object对象
原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...
- JavaScript之Object对象常用属性与方法手册
MDN Object参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Obje ...
- javascript 遍历object对象
(function(){ var str = ''; for(var i in obj){ //遍历object str += '\n'+(i+' : '+obj[i]); // i+' : '+ob ...
- JavaScript笔记 - Object对象特性的应用
可以依据js对象中key是永远不会重复的原则,来模拟Map类型以及去除数组重复项. 1.模拟Map类型 (1)构造Map对象 function Map(){ //private var obj = { ...
- JavaScript:对Object对象的一些常用操作总结
JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...
- JavaScript Object对象
目录 1. 介绍:阐述 Object 对象. 2. 构造函数:介绍 Object 对象的构造函数. 3. 实例属性:介绍 Object 对象的实例属性:prototype.constructor等等. ...
- 详解JavaScript中的Object对象
Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...
- js中的Object.defineProperty()和defineProperties()详解
ECMAS-262第5版在定义只有内部采用的特性时,提供了描述了属性特征的几种属性.ECMAScript对象中目前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描述 ...
- Javascript中的Object对象
Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...
随机推荐
- 【CF888G】Xor-MST Trie树(模拟最小生成树)
[CF888G]Xor-MST 题意:给你一张n个点的完全图,每个点有一个权值ai,i到j的边权使ai^aj,求这张图的最小生成树. n<=200000,ai<2^30 题解:学到了求最小 ...
- 用js内置对象XMLHttpRequest 来用ajax
步骤: /* 用XMLHTTPRequest来进行ajax异步数据交交互*/ 主要有几个步骤: //1.创建XMLHTTPRequest对象 //最复杂的一步 if (window.XMLHttpRe ...
- python-django开发学习笔记四
先插入一条广告,博主新开了一家淘宝店,经营自己纯手工做的发饰,新店开业,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!店名: 小鱼尼莫手工饰品店经营: 发饰.头花.发夹.耳环等(手工制作)网店: ...
- 扩展Spring切面
概述 Spring的切面(Spring动态代理)在Spring中应用十分广泛,例如还有事务管理,重试等等.网上介绍SpringAop源码很多,这里假设你对SpringAop有基本的了解.如果你认为Sp ...
- ubuntu16.04下安装pycharm
下面开始教程 先在PyCharm官网下载安装包 链接:https://www.jetbrains.com/pycharm/download/#section=linux 选择平台为Linux,可以看到 ...
- hadoop(角色)各个组件配置信息
1)namenode: core-site.xml文件中决定: <property> <name>fs.def ...
- Recv-Q&Send-Q
最近线上某些服务器老是报cpu load高,同机房其他机器却没有问题.排查发现以下异常 ss -nl Recv-Q Send-Q Local Address:Port ...
- Cocos2d比较好的博客
1 .http://blog.csdn.net/bill_man/article/details/7202458 学习笔记 2.http://cocos2d-x.org/ 官网 3.http://ww ...
- Python Cookbook 笔记--12章并发编程
<Python Cookbook(第3版)中文版> 1.队列queue的有些方法是线程不安全的,在多线程中最好别用 2.需要限制一段代码的并发访问量时,用信号量.不要把信号量当做普通的锁来 ...
- 【Pyton】【小甲鱼】类和对象
一.类 定义一个类,例子如下: class Turtle: #定义一个名为Turtle的类,Python中类型约定以大写字母开头 #属性 color='green' weight=10 legs=4 ...