javascript面向对象笔记,捋1捋JavaScript对象的知晓

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

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

###掌握对象
ECMA-26二把对象定义为:“严节属性的汇合,其质量可以涵盖基本值、对象可能函数。”严苛来讲,那就相当于说对象是1组并未有一定顺序的值。对象的各样属性或艺术都有3个名字,而各类名字都映射到三个值。

###知晓对象
ECMA-26二把对象定义为:“无序属性的汇集,其品质能够涵盖基本值、对象或然函数。”严俊来讲,那就一定于说对象是壹组并未一定顺序的值。对象的各类属性或艺术都有二个名字,而各样名字都映射到叁个值。

ECMA-26二把目的定义为:冬辰属性的集聚,其属性能够分包基本值、对象大概函数。

ECMA-26贰把目的定义为:严节属性的聚众,其属性能够包罗基本值、对象或许函数。

咱俩得以把ECMAScript的指标想象成散列表:无非就是1组名值对,在这之中的值能够是数码或函数。

大家得以把ECMAScript的目标想象成散列表:无非正是一组名值对,个中的值能够是数额或函数。

对象的每一种属性或格局都有三个名字,而各类名字都映射到2个值。值能够是多少或函数。

目的的每一个属性或措施都有八个名字,而各类名字都映射到3个值。值能够是数据或函数。

各样对象都以依照二个引用类型创立的,即开立自定义对象的最简便方法就是创制3个Object的实例,然后再为它增添属性和方式

种种对象都是依据叁个引用类型成立的,即创设自定义对象的最简便方法正是创办3个Object的实例,然后再为它增加属性和方法

各样对象都以依照一个引用类型创立的,这几个引用类型能够是原生类型,也可以是开拓人士定义的类别。

澳门葡京,各类对象都以基于2个引用类型创设的,那几个引用类型能够是原生类型,也能够是开荒职员定义的花色。

早先时代的JavaScript开垦人士使用那个格局开创新性格

初期的JavaScript开辟人士使用这些情势创立新天性

开创自定义对象的二种方法:

创造自定义对象的三种艺术:

 

 

一、成立2个Object实例,再为它增多属性和措施,如下所示。

1、创设三个Object实例,再为它增加属性和办法,如下所示。

澳门葡京 1

澳门葡京 2

var person = new Object();
person.name = 'xingba';
person.age = '24';
person.job = 'front-end Engineer';
person.sayName = function(){
  alert(this.name);
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);
  }
}
var person = {
  name:'xingba',
  age:'24',
  job:'front-end Engineer',
  sayName:function(){
    alert(this.name);
  }
}

几年后,对象字面量成为创制那种对象的首荐格局。

几年后,对象字面量成为开创那种对象的首推情势。

以上创造的指标中都包括属性和艺术。而这一个属性在开创时都富含1些表征值,js通过那几个特征值来定义它们的行为。

javascript面向对象笔记,捋1捋JavaScript对象的知晓。如上成立的靶子中都涵盖属性和情势。而这一个属性在创立时都富含1些特征值,js通过这个特点值来定义它们的作为。

 

 

属性类型:

品质类型:

澳门葡京 3

澳门葡京 4

ECMAScript中有三种属性:数据属性和做客器属性。

ECMAScript中有三种脾气:数据属性和做客器属性。

 

 

一、数据属性

一、数据属性

这一个属性在创霎时都含有一些特征值,JavaScript通过那个特征值来定义它们的作为

这个属性在创立时都包罗1些表征值,JavaScript通过这一个特色值来定义它们的行为

多少属性有五个描述其行为的表征。

数码属性有多少个描述其表现的特点。

质量类型

ECMA-262第陆版在概念了只有个中才用的特征时,描述了品质的各类风味,那些特点是为了完毕JavaScript引擎用的,由此在JavaScript中不能直接待上访问它们。

ECMAScript中有两种性子:数据属性和走访器属性

####1、数据属性
数据属性包罗一个数据值的职分,这一个职位能够读取和写入值,可经过对象直接定义的性情。数据属性有多少个描述其表现的特征

| 个性 | 值 | 解析 | | :—- |:—-:| :—-| | configurable | true/false
|
是还是不是足以经过delete删除属性,能或无法修改属性的特点,能还是无法把质量修改为访问器属性,默许true
| | enumerable | true/false | 是不是能够通过for in循环重临,暗许true | |
writable | true/false | 是或不是足以修改属性的值,私下认可true | | value |
undefined | 设置属性的值,暗许undefined |

####2、访问器属性
访问器属性只好通过Object.defineProperty()方法来定义,不能够经过对象直接定义,不能够一贯存款和储蓄数据值。访问器属性有多个描述其表现的性状

| 特性 | 值 | 解析 | | :—- |:—-:| :—-| | configurable | true/false
|
是或不是能够透过delete删除属性,能或不可能修改属性的特点,能还是不能够把质量修改为访问器属性,暗许true
| | enumerable | true/false | 是还是不是足以经过for in循环重返,私下认可true| |
get | function | 读取属性值时调用的函数 | | set | function |
修改属性值时调用的函数 |

####三、修改属性暗中同意的风味
要修改属性暗中同意的表征,必须运用ECMAScript伍的Object.defineProperty()方法,那一个点子接收多个参数:属性所在的靶子、属性的名字和1个叙述符对象(IE九+)

留意:当使用Obeject.defineProperty()定义对象属性时,同时钦点了get/set和value/writable时,会报错

 

澳门葡京 5

 

当使用Object.defineProperty()来定义对象属性时,暗中同意为访问器属性,可是假使钦定了value或writable性情时,该属性被定义为数量属性

 

澳门葡京 6

 

修改两个属性暗中认可的风味:object.definePropertues(),以上代码在book对外国商人定义了七个数据属性(_year和edition)和一个走访器属性(year),与下部定义的靶子同样

 

澳门葡京 7

 

####四、读取属性的特征
要读取属性的特征,必须采纳ECMAScript五的:Object.getOwnPropertyDescriptor()方法,这么些办法接收八个参数:属性所在的靶子和要读取其叙述符的习性名称

 

澳门葡京 8

澳门葡京 9

 

天性类型

ECMA-26二第四版在概念了唯有当中才用的风味时,描述了质量的各类风味,那个特征是为着完结JavaScript引擎用的,因而在JavaScript中无法一贯访问它们。

ECMAScript中有两种属性:数据属性和访问器属性

####一、数据属性
数据属性包罗1个数据值的岗位,这么些岗位能够读取和写入值,可因此对象间接定义的特性。数据属性有多个描述其行事的风味

| 本性 | 值 | 解析 | | :—- |:—-:| :—-| | configurable | true/false
|
是还是不是足以因此delete删除属性,能或不可能修改属性的风味,能或无法把质量修改为访问器属性,暗中同意true
| | enumerable | true/false | 是不是能够透过for in循环再次回到,暗许true | |
writable | true/false | 是不是足以修改属性的值,私下认可true | | value |
undefined | 设置属性的值,默许undefined |

####2、访问器属性
访问器属性只可以通过Object.defineProperty()方法来定义,不可能因而对象直接定义,不能够直接存款和储蓄数据值。访问器属性有三个描述其表现的特色

| 天性 | 值 | 解析 | | :—- |:—-:| :—-| | configurable | true/false
|
是还是不是能够通过delete删除属性,能还是无法修改属性的表征,能或无法把品质修改为访问器属性,默许true
| | enumerable | true/false | 是还是不是足以由此for in循环重临,暗中同意true| |
get | function | 读取属性值时调用的函数 | | set | function |
修改属性值时调用的函数 |

####叁、修改属性默许的特点
要修改属性私下认可的性格,必须运用ECMAScript五的Object.defineProperty()方法,那几个格局接收八个参数:属性所在的靶子、属性的名字和二个叙述符对象(IE九+)

只顾:当使用Obeject.defineProperty()定义对象属性时,同时钦点了get/set和value/writable时,会报错

 

澳门葡京 10

 

当使用Object.defineProperty()来定义对象属性时,默以为访问器属性,不过一旦钦命了value或writable天性时,该属性被定义为数量属性

 

澳门葡京 11

 

修改多少个天性暗中同意的特色:object.definePropertues(),以上代码在book对外国商人定义了三个数据属性(_year和edition)和多个造访器属性(year),与下部定义的对象一样

 

澳门葡京 12

 

####四、读取属性的表征
要读取属性的性状,必须运用ECMAScript伍的:Object.getOwnPropertyDescriptor()方法,这一个措施接收四个参数:属性所在的指标和要读取其讲述符的性质名称

 

澳门葡京 13

澳门葡京 14

 

  Configurable:表示能还是不能够通过delete删除属性从而再次定义属性,能还是不能修改属性的特征,也许是还是不是把性能修改为访问器属性。默以为true。

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

  Enumerable:表示能不能通过for-in循环重临属性。默感到true。

  Enumerable:表示能或无法通过for-in循环重返属性。默感觉true。

  Writable:表示是或不是修改属性的值。默许为true。

  Writable:表示是还是不是修改属性的值。默感到true。

  Value:包罗那脾本性的数据值。读取属性值的时候,从那个职位读;写入属性值的时候,把新值保存在那几个地方。默认为undefine。
 例如:

  Value:包涵那个特性的数据值。读取属性值的时候,从那几个职责读;写入属性值的时候,把新值保存在那几个地点。默以为undefine。
 例如:

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

  此时Value特性将被设置成
‘xingba’,而对那一个值的此外修改豆乳杯反映在这几个职责。

  此时Value本性将被设置成
‘xingba’,而对这么些值的别样改换豆汁杯反映在那几个职位。

要修改属性默许本性,必须利用ECMAScript五的Object.defineProperty()措施。该办法接收八个参数:属性所在对象,属性名和3个叙述符的对象。描述符对象的性质必须是:configurable、enumrable、writable和value。设置个中的3个或多个值,能够修改对应的特点值。例如:

要修改属性暗中认可个性,必须运用ECMAScript伍的Object.defineProperty()办法。该办法接收多少个参数:属性所在对象,属性名和三个讲述符的指标。描述符对象的习性必须是:configurable、enumrable、writable和value。安装个中的2个或四个值,能够修改对应的特性值。例如:

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'
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'

再就是在严峻形式下,以上语句会报错,如下图所示。

同时在严刻格局下,以上语句会报错,如下图所示。

澳门葡京 15

澳门葡京 16

如出1辙的将configurable设置为false,表示无法从指标中除去属性。要是对那么些天性调用delete,在严厉情势下会报错,而非严厉情势下何以也不会爆发。

平等的将configurable设置为false,表示无法从指标中去除属性。借使对这天个性调用delete,在严俊格局下会报错,而非严峻方式下哪些也不会时有发生。

而且上面有关联设置configurable的值能够安装是或不是足以修改属性的性状。壹旦configurable设置成false,则属性就会被定义为不可配置的,而且就不可能再把他变回可配备了。此时,再调用Object.defineProperty()方法设置特色值会报错,而且调用Object.defineProperty()方法时只要不点名,configurable,enumerable,writable暗中认可值是false,如下所示。

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

澳门葡京 17

澳门葡京 18

二、访问器属性

二、访问器属性

做客器属性不分包数据值,包蕴一对getter和setter函数(七个函数非必需)。那多个特点可以用来不一致访问器属性和数码属性。访问器属性不能直接定义,必须运用Object.defineProperty()来定义.。

走访器属性不分包数据值,包括壹对getter和setter函数(八个函数非必需)。那八个特征能够用来区分访问器属性和数量属性。访问器属性不可能直接定义,必须选取Object.defineProperty()来定义.。

读取访问器属性时,会调用getter函数,这几个函数负责重返有效的值;在写入访问器属性时,会调用setter函数并传播新值,这些函数负责调节哪些处理多少,如下所示。

读取访问器属性时,会调用getter函数,那一个函数负责重回有效的值;在写入访问器属性时,会调用setter函数并传播新值,那个函数负责调整哪些处理数量,如下所示。

澳门葡京 19

澳门葡京 20

利用Object.defineProperties()方法可感觉指标定义六特性情

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

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

  _name:{
    value:'xingba'
  },

  age:{
    value:100
  },

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

});

 

 

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website