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对象来存储数据,并没有使用到太多其他功能,但是 ...
随机推荐
- [原]git的使用(六)---远程仓库
10.远程仓库 -------------------------------------------------------------------------------------------- ...
- intelj idea编译项目报错,Error:ajc: The method getDestHost() is undefined
一.问题简述 这两天在idea中引入过aspectJ相关的东西,用到了aspectJ的编译器进行编译时织入. 结果今天在编译一个老项目时,(用到了lombok,lombok的idea插件会在javac ...
- 为Gem 添加环境设定
如果在测试环境中 gem "rspec", :group => :test 当多个gem的时候 group :test do gem "webrat" g ...
- 【CF878E】Numbers on the blackboard 并查集
[CF878E]Numbers on the blackboard 题意:给你一个长度为n个数列,你每次可以进行如下操作: 选取两个相邻的数x,y(x在y左面),然后将这两个数去掉,用x+2y替换它. ...
- 使用curl进行s3服务操作
最近使用curl对s3进行接口测试,本想写个总结文档,但没想到已有前辈写了,就直接搬过来做个记录吧,原文见: http://blog.csdn.net/ganggexiongqi/article/de ...
- Unity3D笔记 NUGUI 一
NGUI是严格遵循KISS原则(KISS原则,keep it simple and stupid ,简单的理解这句话就是,要把一个系统做的连白痴都会用.这就是用户体验的高层境界了,好听的说法也是有的, ...
- vsftpd java程序无法创建和切换目录
# Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly parano ...
- vue--使用定时器的问题
https://blog.csdn.net/ywl570717586/article/details/79963162
- sublime--将vue代码进行高亮显示
vue的.vue文件sublime是不认识,但是为了让 .vue 文件看上去更加简洁:所以要用到一款不错的插件: 下载:vue-syntax-highlight https://gitee.com/m ...
- WEB前端开发规范文档[转]
为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益的. 本文档由本人编写, 部分意见来源于网络, 以此感谢, ...