属性:对象中可以保存数据的变量

属性的特性:
     数据属性的特性(默认值是false):value、writable(可写否) 、enumerable(可否枚举)、configurable(可否重新配置)

   访问器属性的特性:get、set、enumerable、configurable  使用该访问器的特性来设置每个数据的形式,可以更加精准的确定是否只读、只写或者可读可写

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>数据属性和访问器属性</title>
<script src="js/jquery.min.js"></script>
<script >
var employee = {
monSalary: 5000,
get yearSalary() {
alert(" get yearSalary()被调用!");
return this.monSalary * 12;
},
set yearSalary(value) {
this.monSalary = value / 12;
}
};
// alert(employee.yearSalary);
// employee.yearSalary = 12000;
// alert(employee.monSalary); var stu = {chinese:90};//为对象添加属性
stu.math=80; //为对象添加属性 for(var p in stu){//遍历输出
alert(p+'=>'+stu[p]);
}
//为对象添加一个新的数据属性 Object.defineProperty(
stu,
'english',
{
value:100,
writable:true,
enumerable:true,//可以枚举遍历出来:false就不枚举
configurable:true//怎么定义和后面的定义没有影响,不管定义为true还是false,后面再次定义都是可以生效的
}
); Object.defineProperty(
stu,
'english',
{
value:130,
writable:false,//默认值是false:因为在上面就定义为true,之后再想改为false是无法改变的
enumerable:false,//可以枚举遍历出来:false就不枚举
configurable:false//重新配置属性的特性:再次定义也会生效。
}
);
alert("english:"+stu.english);
//枚举对象中的每个属性
var arr=Object.keys(stu);
alert(arr.length);

使用属性的特性定义一个新的访问器属性(访问器属性的特性)


Object.defineProperty{
stu,
'total',//给stu添加一个属性total,且描述该属性的四个特性
{//属性的描述符对象--定义属性的特性
 get : function(){},
set : function(value){},
  enumerable : true,
  configurable : true
}
};

demo:正方形求面积和周长
  var square ={
__width:0,//没有使用数据属性。而是使用两个下划线的方式转化为访问器属性的方式来传递不同的值
get perimeter(){
return this.__width * 4;
},
set perimeter(value){
this.__width=value/4;
},
         writable:true,//可更改
         configurable:true//可重新配置
}; 给square对象添加size属性 切记:get 和 set 必须使用冒号,否则size输出的是undefined
Object.defineProperty(
square,
'size',
{
get:function(){
return this.__width * this.__width;
},
set:function(value){
this.__width=Math.sqrt(value);
},
enumerable:true,//可枚举
configurable:true//可重新配置
}
);
square.__width=10;
alert("周长是:"+square.perimeter);
alert("面积是:"+square.size);

    </script>
</head>
<body></body>
</html>

最新文章

  1. Oracle数据库的创建以及远程连接(PL/SQL Developer远程连接数据库)
  2. sqlite3之基本操作(一)
  3. gitlab 配置邮箱
  4. 客户端ARPG角色行为模型
  5. Java学习笔记之:Java的数据类型
  6. powerdesigner连接数据库 导出数据 生成PDM文件 傻瓜试教程
  7. Android BLE开发之Android手机搜索iBeacon基站
  8. eclipse 注释模板设置
  9. CocoaPods的install和update卡在“Anylyzing dependencies”的问题解决方式[效率]
  10. Advanced Installer 制作.NetWeb部署安装包
  11. vDSP加速的应用
  12. Scrapy爬虫框架第七讲【ITEM PIPELINE用法】
  13. 【vue】函数式组件
  14. RSP小组——团队冲刺博客五
  15. react native 环境报错
  16. 788. Rotated Digits
  17. Django--Auth 模块
  18. 解决MSDE安装回滚的问题
  19. JS中取得&lt;asp:TextBox中的值
  20. HBase笔记之namespace

热门文章

  1. 修复服务器上出现ImportError: cannot import name main的问题
  2. python,关于这个里边的私有方法(private)、保护方法(protected)、公开方法(public)
  3. [Kubernetes]如何使用yaml文件使得可以向外暴露服务
  4. 使用 Charles 抓取 App 网络请求
  5. 【转】线程join()方法的含义
  6. windows server 2008开启共享文件设置
  7. Zookeeper-Watcher机制与异步调用原理
  8. Windows服务没有及时响应启动或控制请求1053
  9. Day8--------------ssh服务
  10. Day7--------------IP地址配置