Javascript OOP Basics

1. Two Simplest Way to Create Object

(1) The One Way

var person = new Object();  <!-- or var person = {}; -->
person.name = 'Cent Wen';
person.age = 28;
person.email = 'fightingbull@163.com';
person.show = function(){
                document.writeln('Name: ' +this.name+'<br>'+
                                 'Age: ' + this.age+'<br>'+
                                 'Email: '+this.email+'<br>');
              };
10   

(2) The Other Way (identical to The One Way)

var person = {
    name:'Cent Wen',
    age: 28,
    email: 'fightingbull@163.com',
    show: function(){
            document.writeln('Name: ' +this.name+'<br>'+
                             'Age: ' + this.age+'<br>'+
                             'Email: '+this.email+'<br>');
          }
10          };
11   

2. Data Properties

  • [configurable], Indicates if the property may be redefined by removing the property via delete, changing the property's attributes, or changing the property into an accessor property. By default, this is true for all properties defined directly on an object, as in the previous example.

For previous person object:

delete person.name; 
document.write(person.name);  //undefined
  • [enumerable], Indicates if the property will be returned in a for-in loop. By default, this is true for all properties defined directly on an object, as in the previous example.

For previous person object:

 for(var key in person){
       document.write(key+': '+ person[key]+'<br>');
}
The output: 
name: Cent Wen
age: 28
email: fightingbull@163.com
show: function () { document.writeln('Name: ' +this.name+'
'+ 'Age: ' + this.age+'
10  '+ 'Email: '+this.email+'
11  '); }
12   
  • [writable], Indicates if the property's value can be changed. By default, this is true for all properties defined directly on an object, as in the previous example.
  • [value], Contains the actual data value for the property. This is the location from which the property's value is read and the location to which new values are saved. The default value for this attribute is undefined.

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.

var person = {};
Object.defineProperty(person,'name',{
  configurable:false,
  writable:false,
  enumerable:false,
  value:'Cent Wen'
});
 
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

  • [configurable], Indicates if the property may be redefined by removing the property via delete, changing the property's attributes, or changing the property into a data property. By default, this is true for all properties defined directly on an object.
  • [enumerable], Indicates if the property will be returned in a for-in loop. By default, this is true for all properties defined directly on an object.
  • [get], The function to call when the property is read from. The default value is undefined.
  • [set], The function to call when the property is written to. The default value is undefined.
var person = {
    _name:'Cent Wen',
};
Object.defineProperty(person,'name',{
  get:function(){ return this._name;},
  set:function(newValue){this._name = newValue;}
});
 
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.

var person = {};
Object.defineProperties(person,{
  _name:{value:'Cent Wen'},
  age:{value:28},
  name:{
      get:function(){return this._name;},
      set:function(newValue){this._name = newValue;}
       }
});

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:

var descriptor = Object.getOwnPropertyDescriptor(person,'_name');
alert(descriptor.value);  //Cent Wen
alert(descriptor.configurable);  //false
alert(typeof descriptor.get);  //undefined
 
descriptor = Object.getOwnPropertyDescriptor(person,'name');
alert(descriptor.value);  //undefined
alert(descriptor.configurable);  //false
alert(typeof descriptor.get);  //function

 

PS: 如果您喜欢我的博文,请访问我的另一博客网站:Cent Wen’s Blog

你可能感兴趣的:(Javascript)