1. var p = {}
2. p.name = 'wangBaoQiang'
3. p.age = 30
4. p.show = function(){
5.     console.log('你们好')
6. }
7.
8. // 那怎样才能删除age属性呢?
9.
10. // console.dir(p)
11. // p.age = undefined
12. // console.dir(p)
13. // p.age = null
14. // console.dir(p)
15. // 上述方法只能改变属性的值 不能删除属性
16. delete p.age
17. console.dir(p)
18. delete p.show
19. console.dir(p)
20. // delete 不光能删除属性也可以删除方法
21.
22. var num = new Number(3.14159)
23. console.log(num)
24. var obj = new Object(3.14159)
25. console.log(obj)
26. var b =new Object(true)
27. console.log(b)
28.
29. var p = {
30.     name:'BaoBao',
31.     age:3
32. }
33. var p1 = {
34.     name:'maRong',
35.     age:4
36. }
37. Object.defineProperty(p1,'isMale',{
38.     value:true,
39.     configurable:true,
40.     writable:true,
41.     enumerable:true
42. })
43. // defineProperty 为对象定义一个新的属性
44. // 三个参数
45. //     第一个参数:要添加新属性的对象
46. //     第二个参数:属性名称
47. //     第三个参数:属性描述对象{
48. //         value:属性值
49. //         configurable 默认为false 指定属性是否被删除 false无法删除
50. //         writable 指定属性值是否能改变
51. //         enumerable 属性名是否在枚举中 也就是说可以被for...in...列举出来
52. //     }
53. // delete p1.isMale
54. p1.isMale = '111'
55. console.log(p1)
56. for(var k in p1){
57.     console.log(k)
58. }
59.
60. p1.height = 100
61.
62. var heightDesc = Object.getOwnPropertyDescriptor(p1,'height')
63. console.log(heightDesc)
64. // 在p1对象里获取属性height的描述信息
65.
66.
67. // 创建一批表示人的p对象 比如100人
68. var p2 = {
69.     name:'1',
70.     age : '3',
71.     desc:'我的名字叫baoqiang,今年28'
72. }
73. var p3 = {
74.     name:'2',
75.     age : '4',
76.     desc:'我的名字叫marong,今年48'
77. }
78. var p4 = {
79.     name:'3',
80.     age : '7',
81.     desc:'我的名字叫songzhe,今年38'
82. }
83. // 使用构造函数
84. // 把一个函数当成构造函数使用 函数名字首字母大写
85. // Pascal命名法
86. function Person(name,age,isMale,height){
87.     this.name = name
88.     this.age = age
89.     this.isMale = isMale
90.     this.height = height
91.     Object.defineProperty(this,'birthYear',{
92.         configurable:false,
93.         enumerable:true,
94.         get:function(){
95.             var year = new Date().getFullYear()
96.             return year - this.age
97.         },
98.         set:function(value){
99.             var year = new Date().getFullYear()
100.             if(value > 2017){
101.                 alert('出生年份不能大于' + year)
102.                 return
103.             }
104.             this.age = year - value
105.         }
106.     })
107. }
108. // 把定义的属性代码移到构造函数中 之后 通过构造函数创建的对象都会有这些属性
109.
110. var person = new Person('1','3','4','5')
111. var person1 = new Person('4',28,'6','7')
112.
113. // 通过person1.birthYear获取属性值时会调用属性指定的get方法 计算出属性值
114.
115. person1.birthYear = 2200
116. console.log(person)
117. console.log(person1.birthYear)
118.
119. // 没有set方法的情况下 无法通过[.属性 = 值]改变属性的值 
120. // 有set方法时 通过[.属性 = 值]设置值的时候
121. // 会调用set方法 将 = 后面的值当做参数传给set方法
122. // 已保留或者转换这个值
123.
124. console.log(p4)