ECMAScriptjavascript面向对象笔记(一)

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

ECMA-262把对象定义为:无序属性的集纳,其属性可以涵盖基本值、对象要函数。

靶的每个属性或艺术还来一个名,而每个名字还投到一个值。值好是数额还是函数。

每个对象还是基于一个援类型创建的,这个引用类型可以是原生类型,也得是开发人员定义的品种。

开创于定义对象的点滴种方式:

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);
  }
}

上述创建的对象吃还蕴涵属性和办法。而这些性在创立时还饱含一些特点值,js通过这些特色值来定义其的行事。

性能类型:

ECMAScript中出个别栽特性:数据性和走访器属性。

1、数据性

数据性有4个描述其行的特色。

  Configurable:表示是否通过delete删除属性从而再次定义属性,能否修改属性之特征,或者是否将性能修改也看器属性。默认为true。

  Enumerable:表示是否通过for-in循环返回属性。默认为true。

  Writable:表示能否修改属性之值。默认为true。

  Value:包含这个特性之数据值。读取属性值的下,从者岗位读;写副属性值的时候,把新值保存于这位置。默认为undefine。
 例如:

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

  这Value特性将给安装成
‘xingba’,而针对性这价值的外改动豆浆杯反映在斯职位。

如改属性默认特性,必须使用ECMAScript5之Object.defineProperty()术。该法接收三单参数:属性所在对象,属性名和一个叙称的对象。描述吻合对象的性必须是:configurable、enumrable、writable和value。装中的一个或者多只价,可以修改对应的特性值。例如:

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,表示不能够从目标被剔除属性ECMAScript。如果对斯特性调用delete,在严模式下会报错,而休严加模式下啊也未见面出。

而且上面有关联设置configurable的值好安装是否好改属性之特性。一旦configurable设置成false,则属性就见面叫定义也不可配置的,而且就是未可知重复把他转换扭不过配置了。此时,再调用Object.defineProperty()方法设置特色值会报错,而且调用Object.defineProperty()方法时要非指定,configurable,enumerable,writable默认值是false,如下所示。

ECMAScript 2

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;
    }
  }

});