javascript面向对象笔记(一)

ECMAscript对象(以下简称对象):

ECMA-262把对象定义为:无序属性的集纳,其质量可以分包基本值、对象可能函数。

目标的每种属性或格局都有1个名字,而各种名字都映射到2个值。值可以是多少或函数。

种种对象都以依照三个引用类型创设的,这一个引用类型可以是原生类型,也可以是开发人士定义的序列。

创办自定义对象的二种情势:

1、成立多少个Object实例,再为它添加属性和章程,如下所示。

var person = new Object();
person.name = 'xingba';
person.age = '24';
person.job = 'front-end Engineer';
person.sayName = function(){
  alert(this.name);

2、对象字面量,如下所示。

var person = {
  name:'xingba',
  age:'24',
  job:'front-end Engineer',
  sayName:function(){
    alert(this.name);
  }
}

ECMAScript,如上创制的靶子中都蕴涵属性和章程。而这一个属性在创建时都蕴涵一些特色值,js通过那么些特点值来定义它们的一举一动。

性情类型:

ECMAScript中有三种天性:数据属性和访问器属性。

一,数据属性

多少属性有五个描述其表现的特色。

  Configurable:表示能或不能通过delete删除属性从而再次定义属性,能或不能修改属性的特征,大概是不是把品质修改为访问器属性。暗中认同为true。

  Enumerable:表示是还是不是通过for-in循环再次来到属性。专擅认同为true。

  Writable:表示能如故不能修改属性的值。暗中认同为true。

  Value:包罗这些天性的数据值。读取属性值的时候,从那么些职分读;写入属性值的时候,把新值保存在这些职位。专擅认同为undefine。
 例如:

var person = {
   name = 'xingba'; 
};

  此时Value特性将被设置成
‘xingba’,而对那些值的其余修改豆浆杯反映在那个地方。

要修改属性默许个性,必须拔取ECMAScript5的Object.defineProperty()艺术。该措施接收三个参数:属性所在对象,属性名和二个讲述符的目的。描述符对象的性质必须是:configurable、enumrable、writable和value。安装其中的3个或八个值,可以修改对应的风味值。例如:

var person = {};
Object.defineProperty(person,name,{
    writable:false, //默认为true,这里设置成false表示name属性只读并且不可被修改
    value:'xingba'  //设置name的值为 'xingba'
});
console.log(person.name);  // 'xingba'
person.name  = 'bao';  //再重新设置name值
console.log(person.name);  // 'xingba'

而且在严酷形式下,以上语句会报错,如下图所示。

ECMAScript 1

同样的将configurable设置为false,表示无法从目的中去除属性。若是对这些天性调用delete,在严酷方式下会报错,而非严俊格局下怎么着也不会时有发生。

还要上边有涉及设置configurable的值能够安装是还是不是可以修改属性的特点。一旦configurable设置成false,则属性就会被定义为不可配置的,而且就不只怕再把他变回可安插了。此时,再调用Object.defineProperty()方法设置特色值会报错,而且调用Object.defineProperty()方法时如果不指定,configurable,enumerable,writable暗中同意值是false,如下所示。

ECMAScript 2

二,访问器属性

访问器属性不带有数据值,包罗一对getter和setter函数(三个函数非必需)。那多个特征可以用来分别访问器属性和数目属性。访问器属性不只怕从来定义,必须选拔Object.defineProperty()来定义.。

读取访问器属性时,会调用getter函数,这些函数负责再次来到有效的值;在写入访问器属性时,会调用setter函数并传播新值,那一个函数负责控制哪些处理数据,如下所示。

ECMAScript 3

利用Object.defineProperties()方法可以为指标定义八个属性

var person = {};
Object.defineProperties(person,{

  _name:{
    value:'xingba'
  },

  age:{
    value:100
  },

  name:{
    get:function(){
      return this._name
    },
    set:function(newName){
      this._name = newName;
    }
  }

});