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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值