javascript面向对象之Object.defineProperty(a,b,c)

/*
Object.defineProperty(a,b,c);介绍
a:需要属性设置的对象
b:需要设置的属性名,(键值)
c:是一个用于描述属性值得json数据.这个json数据有configurable,eumerable,writable,value组成
configurable:1.能否被delete删除,2.他的属性值能否被修改.3.能否把属性设置成访问器属性,默认是true,可以删除,,修改,设置
eumerable:能否被for-in循环到
writable:表示属性值能否被修改
value:属性值.
*/

1  var human = {}

2     //将属性name设置成无法修改状态.

3     Object.defineProperty(human, "name", { writable: false, value: "晁天王" });

4     alert(human.name); //晁天王

5     human.name = "宋江";//严格模式下会报错 
6   alert(human.name); //宋江
1 //修改configurable为不可配置,则无法删除和修改属性的特性.

2     Object.defineProperty(human, "name", { configurable: false, value: "黑旋风李逵" });

3     alert(human.name); //黑旋风李逵

4     delete human.name;//严格模式下会报错 
5   alert(human.name); //黑旋风李逵
6   //一旦把配置属性configurable设置成false,就不能在设置成true了.否则会报错
7   Object.defineProperty(human, "name", { configurable: true, value: "天罡星玉麒麟卢俊义" });//下面是报错截图

访问器属性:

 1 var human = {

 2         _age:18,//下划线是一种常用的记号.用于只能通过对象方法访问的属性

 3         role:"大人"

 4     };

 5     Object.defineProperty(human, "age", {

 6         get: function () {//放回age属性值

 7             return this._age;

 8         },

 9         set: function (ageValue) {//设置对象中的属性值

10             if (ageValue >= 18)

11                 this.role = "大人";            

12             else

13                 this.role = "小孩";

14         }

15     });

16     human.age = 20;

17     alert(human.role); //大人

18     human.age = 10;

19     alert(human.role); //小孩

这个get和set在一起配合使用,可以很好的起到封装对象的作用.

你可能感兴趣的:(JavaScript)