1. Two Simplest Way to Create Object
(1) The One Way
1 | var person = new Object(); <!-- or var person = {}; --> |
2 | person.name = 'Cent Wen'; |
3 | person.age = 28; |
4 | person.email = 'fightingbull@163.com'; |
5 | person.show = function(){ |
6 | document.writeln('Name: ' +this.name+'<br>'+ |
7 | 'Age: ' + this.age+'<br>'+ |
8 | 'Email: '+this.email+'<br>'); |
9 | }; |
10 |
(2) The Other Way (identical to The One Way)
1 | var person = { |
2 | name:'Cent Wen', |
3 | age: 28, |
4 | email: 'fightingbull@163.com', |
5 | show: function(){ |
6 | document.writeln('Name: ' +this.name+'<br>'+ |
7 | 'Age: ' + this.age+'<br>'+ |
8 | 'Email: '+this.email+'<br>'); |
9 | } |
10 | }; |
11 |
2. Data Properties
For previous person object:
1 | delete person.name; |
2 | document.write(person.name); //undefined |
For previous person object:
1 | for(var key in person){ |
2 | document.write(key+': '+ person[key]+'<br>'); |
3 | } |
4 | The output: |
5 | name: Cent Wen |
6 | age: 28 |
7 | email: fightingbull@163.com |
8 | show: function () { document.writeln('Name: ' +this.name+' |
9 | '+ 'Age: ' + this.age+' |
10 | '+ 'Email: '+this.email+' |
11 | '); } |
12 |
For the previous person object, the properties called name, age and email are created with [configurable], [enumerable], [writable] all set to true while the [value] is set to the respectively assigned value. To change the default properties, you must use the ECMAScript 5 Object.defineProperty() method. Note that when you are using Object.defineProperty(), the values for [configurable], [enumerable] and [writable] default to false unless otherwise specified.
1 | var person = {}; |
2 | Object.defineProperty(person,'name',{ |
3 | configurable:false, |
4 | writable:false, |
5 | enumerable:false, |
6 | value:'Cent Wen' |
7 | }); |
8 | |
9 | alert(person.name); <!-- Cent Wen --> |
10 | person.name = 'Someone else'; |
11 | delete person.name; |
12 | alert(person.name); <!-- Cent Wen, can't be configurable, writable--> |
13 |
3. Accessor Properties
1 | var person = { |
2 | _name:'Cent Wen', |
3 | }; |
4 | Object.defineProperty(person,'name',{ |
5 | get:function(){ return this._name;}, |
6 | set:function(newValue){this._name = newValue;} |
7 | }); |
8 | |
9 | person.name = 'Someone'; |
10 | alert(person.name); <!-- Someone --> |
4. Defining Multiple Properties
Since there's a high likelihood that you'll need to define more than one property on an object, ECMAScript 5 provides the Object.defineProperties() method.
1 | var person = {}; |
2 | Object.defineProperties(person,{ |
3 | _name:{value:'Cent Wen'}, |
4 | age:{value:28}, |
5 | name:{ |
6 | get:function(){return this._name;}, |
7 | set:function(newValue){this._name = newValue;} |
8 | } |
9 | }); |
5. Reading Property Attributes
It’s also possible to retrieve the property descriptor for a given property by using the ECMAScript 5 Object.getOwnPropertyDescriptor() method.
For person object in Section 4:
1 | var descriptor = Object.getOwnPropertyDescriptor(person,'_name'); |
2 | alert(descriptor.value); //Cent Wen |
3 | alert(descriptor.configurable); //false |
4 | alert(typeof descriptor.get); //undefined |
5 | |
6 | descriptor = Object.getOwnPropertyDescriptor(person,'name'); |
7 | alert(descriptor.value); //undefined |
8 | alert(descriptor.configurable); //false |
9 | alert(typeof descriptor.get); //function |
PS: 如果您喜欢我的博文,请访问我的另一博客网站:Cent Wen’s Blog