最像JAVA的构造函数
来源:互联网 发布:怎么看手机网络制式 编辑:程序博客网 时间:2024/06/06 03:33
需求:创建一个构造函数,拥有只读、不可删除的id属性;不可删除的name属性;不可遍历、不可删除的salary属性;受访问器属性保护的age属性;
function Emp(id,name,salary,age){ this.id=id; this.name=name; this.salary=salary; this.name=name; var _age; Object.defineProperties(this,{ id:{writable:false}, salary:{enumerable:false}, age:{ get:function(){return _age}, set:function(val){ if(val<18||val>35)throw new Error("年龄必须介于18~35"); _age=val; } } }) this.age=age; Object.seal(this);//密封防篡改 } var eric = new Emp(1001,"eric",10000,19); console.dir(eric); console.log(eric.age);//19
对象属性
数据属性:
/*四大特性*/{ value: 属性值, writable: true/false, //控制是否可修改 enumerable: true/false, //控制是否可被for in遍历 configurable: true/false, //1. 控制是否可删除 //2. 控制是否可修改前两个属性}configurable一旦改为false,不可逆
访问器属性:
- 试图读取访问器属性的值时,自动调用get方法
- 试图修改访问器属性的值时,自动调用set方法,参数value可自动获得想要赋值的新值
- 如果省略set方法,则该访问器属性相当于只读
- 被访问器属性保护的值,应该保持在受闭包保护的局部变量中
例:
(function(){ 、 var _age=24;//受保护的变量 Object.defineProperty(obj,"属性名",{ get:function(){return _age;} set:function(val){//验证val, 再_age=val} enumerable: , configurable: , }) })()
防篡改
防扩展:
判断是否已禁止防扩展: Object.isExtensible(obj);
设置方扩展:Object.preventExtensions(obj);
密封:(在防扩展的基础上,禁止删除现有属性)
判断是否已密封:Object.isSealed(obj);
密封对象:Object.seal(obj);
冻结:(在密封的基础上,禁止修改所有属性)
判断是否被冻结:Object.isFrozen(obj);
冻结对象:Object.fteeze(obj);
0 0
- 最像JAVA的构造函数
- java的构造函数
- JAVA的构造函数
- Java的构造函数
- java的构造函数
- java的构造函数
- Java 构造函数的执行
- Java构造函数的继承
- Java构造函数的执行情况
- Java构造函数的说明。
- java构造函数的心得
- java 构造函数的解析
- Java 构造函数的“继承”
- java构造函数的继承
- 关于java的构造函数
- java 构造函数的解析
- JAVA构造函数的调用
- JAVA构造函数的总结
- java.lang.UnsupportedOperationException: Not implemented by the S3FileSystem FileSystem
- 从零单排——面向对象角度认识JS世界Part2
- LeetCode No.398 Random Pick Index
- 如何调用DLL中的函数
- 【NOIP模拟赛】Pickad 锄奸
- 最像JAVA的构造函数
- Coursera Machine Learning 第二周 quiz Programming Exercise 1: Linear Regression
- VS2010、SQL Server 2008安装详解
- Bmp位图文件
- “tar: Removing leading `/’ from member names”的错误
- js placeholder
- 洛谷 P1268 树的重量
- STL中swap的简单使用及总结
- C++设计模式——简单工厂模式