1 <script type="text/javascript">
2 //ECMA-262把对象定义为:“无序属性的 集合,其属性可以包含基本值、对象或者函数”
3 //理解对象,最简单的方式就是通过创建一个Object的实例,然后为它添加属性和方法
4 var person = new Object();
5 person.name = "Xulei";
6 person.age = "23";
7 person.job = "前端工程师";
8 person.sayName = function () {
9 alert(this.name);
10 }
11
12 //还可以这样写
13 var person = {
14 name: "xulei",
15 age: 23,
16 job: "前端工程",
17 sayName: function () {
18 alert(this.name)
19 }
20 }
21
22
23 //一、属性类型:数据属性和访问其属性
24 //1、数据属性,有4个描述其行为的特性
25 //[Configurable]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为true
26 //[Enumerable]:表示能否通过for-in返回属性,默认值为true
27 //[Writable]:表示能否修改属性,默认值为true
28 //[Value]:包含这个属性的数据值。默认值为undefined
29 var person = {
30 name: "xulei"
31 }
32 //这里创建了一个person对象,value值就是“xulei”
33
34 //要修改属性的默认特性,必须使用ECMAScript5的Object.defineProperty(属性所在的对象,属性的名字,描述符对象)
35 //描述符对象必须是configurable、enumerable、writable、value
36 var peron = {}
37 Object.defineProperty(peron, "name", {
38 writable: false,//属性不能被修改
39 value: "徐磊-xulei"
40 });
41
42 alert(peron.name);//徐磊-xulei
43 peron.name = "徐磊";
44 alert(peron.name);//徐磊-xulei
45 //以上操作在非严格模式下赋值操作会被忽略,如果在严格模式下会抛出异常
46 //一旦把属性定义为不可配置的就不能把它变回可配置的了。
47 //在多数情况下都没有必要利用Object.defineProperty()方法提供的这些高级功能。但是对理解javascript非常有用。
48 //建议读者不要在ie8上使用此方法。
49
50
51 //2、访问其属性,有4个特性
52 //[Configurable]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为true
53 //[Enumerable]:表示能否通过for-in返回属性,默认值为true
54 //[Get]:在读取时调用的函数 默认值undefined
55 //[Set]:在写入属性时调用的函数 默认值Undefined
56 var book={
57 _year:2004,
58 edition:1
59 }
60
61 Object.defineProperty(book,"year",{
62 get:function(){
63 return this._year;
64 },
65 set:function(value){
66 if(value>2004){
67 this._year=value;
68 this.edition +=value-2004;
69 }
70 }
71 });
72 book.year=2005;
73 alert(book.edition);//2
74
75
76
77
78
79 //创建对象
80 //1、将构造函数当做函数
81 function Person(name,age,job) {
82 this.name=name;
83 this.age=age;
84 this.job=job;
85 this.sayName=function(){
86 alert(this.name);
87 }
88 }
89
90 //当做构造函数使用
91 var person=new Person("xulei",23,"software");
92 person.sayName();
93
94 //作为普通函数使用
95 Person("xulei2",23,"job2");//添加到window中
96 window.sayName();
97
98 //在另一个对象的作用域中调用
99 var o=new Object();
100 Person.call(o,"xulei3",23,"job3");
101 o.sayName();
102 </script>