捋一捋JavaScript指标的理解,javascript面向对象笔记

By admin in 4858美高梅 on 2019年4月19日

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

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

###知道对象
ECMA-26二把对象定义为:“严节属性的会合,其特性能够涵盖基本值、对象只怕函数。”严苛来讲,那就也正是说对象是一组并未有一定顺序的值。对象的各样属性或方法都有叁个名字,而各类名字都映射到三个值。

###领悟对象
ECMA-26二把对象定义为:“九冬属性的汇聚,其个性能够涵盖基本值、对象恐怕函数。”严刻来讲,这就一定于说对象是1组并未有特定顺序的值。对象的各种属性或措施都有一个名字,而各种名字都映射到叁个值。

ECMA-26二把指标定义为:严节属性的会面,其性质能够分包基本值、对象或许函数。

ECMA-26二把对象定义为:冬天属性的成团,其属性能够分包基本值、对象或然函数。

我们得以把ECMAScript的靶子想象成散列表:无非就是一组名值对,个中的值能够是数码或函数。

咱俩得以把ECMAScript的靶子想象成散列表:无非正是壹组名值对,当中的值能够是数额或函数。

指标的各样属性或艺术都有3个名字,而种种名字都映射到二个值。值能够是数据或函数。

目的的每一种属性或方法都有2个名字,而各种名字都映射到贰个值。值能够是数量或函数。

各种对象都以依照三个引用类型创造的,即制造自定义对象的最轻松易行方法就是开创贰个Object的实例,然后再为它增加属性和措施

每种对象都以基于叁个引用类型创设的,即创办自定义对象的最轻巧易行方法正是创建3个Object的实例,然后再为它加多属性和格局

捋一捋JavaScript指标的理解,javascript面向对象笔记。种种对象都以根据二个引用类型创设的,那么些引用类型能够是原生类型,也足以是开辟职员定义的品类。

每一个对象都是依据八个引用类型创制的,那一个引用类型能够是原生类型,也足以是开采职员定义的档次。

初期的JavaScript开拓职员使用那些情势创建新性子

初期的JavaScript开采人士使用那些形式成立新本性

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

创办自定义对象的两种方式:

 

 

一、成立3个Object实例,再为它增加属性和艺术,如下所示。

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

4858美高梅 1

4858美高梅 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);
  }
}

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

几年后,对象字面量成为创制那种对象的首推方式。

如上创设的靶子中都带有属性和情势。而那么些属性在开立即都富含一些特点值,js通过这一个特点值来定义它们的行事。

以上创立的对象中都包括属性和办法。而这一个属性在开创时都富含一些个性值,js通过那几个特色值来定义它们的表现。

 

 

质量类型:

属性类型:

4858美高梅 3

4858美高梅 4

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

ECMAScript中有二种性格:数据属性和走访器属性。

 

 

一、数据属性

一、数据属性

那些属性在开立即都饱含1些特点值,JavaScript通过这几个特色值来定义它们的表现

这几个属性在开立时都包蕴壹些风味值,JavaScript通过这几个特色值来定义它们的行为

数码属性有4个描述其一颦一笑的特色。

数量属性有6个描述其行为的性格。

质量类型

ECMA-26二第5版在概念了只有当中才用的特点时,描述了品质的各样风味,这一个特点是为着兑现JavaScript引擎用的,因而在JavaScript中无法向来访问它们。

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

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

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

####二、访问器属性
访问器属性只好通过Object.defineProperty()方法来定义,不可能透过对象直接定义,不能够一直存款和储蓄数据值。访问器属性有多少个描述其一言一动的风味

| 性格 | 值 | 解析 | | :—- |:—-:| :—-| | configurable | true/false
|
是或不是足以由此delete删除属性,能或不能够修改属性的特性,能不可能把品质修改为访问器属性,暗中同意true
| | enumerable | true/false | 是不是足以透过for in循环再次回到,暗许true| |
get | function | 读取属性值时调用的函数 | | set | function |
修改属性值时调用的函数 |

####三、修改属性默许的表征
要修改属性暗中同意的性状,必须采取ECMAScript5的Object.defineProperty()方法,那个主意接收多少个参数:属性所在的对象、属性的名字和二个讲述符对象(IE九+)

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

 

4858美高梅 5

 

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

 

4858美高梅 6

 

4858美高梅,修改5天性格暗许的特色:object.definePropertues(),以上代码在book对外商定义了多个数据属性(_year和edition)和一个做客器属性(year),与下部定义的对象同样

 

4858美高梅 7

 

####4、读取属性的性状
要读取属性的特征,必须使用ECMAScript5的:Object.getOwnPropertyDescriptor()方法,这么些情势接收三个参数:属性所在的指标和要读取其讲述符的属性名称

 

4858美高梅 8

4858美高梅 9

 

品质类型

ECMA-26二第六版在概念了唯有其中才用的特色时,描述了质量的各样风味,那么些特点是为着贯彻JavaScript引擎用的,由此在JavaScript中不能够一向访问它们。

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

####壹、数据属性
数据属性包罗2个数据值的地点,那个地方能够读取和写入值,可透过对象直接定义的性质。数据属性有八个描述其作为的表征

| 天性 | 值 | 解析 | | :—- |:—-:| :—-| | 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 |
修改属性值时调用的函数 |

####三、修改属性暗中认可的特性要修改属性暗许的特色,必须利用ECMAScript5的Object.defineProperty()方法,这一个法子接收多个参数:属性所在的指标、属性的名字和三个讲述符对象(IE玖+)

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

 

4858美高梅 10

 

当使用Object.defineProperty()来定义对象属性时,默认为访问器属性,不过只要钦点了value或writable性兔时,该属性被定义为数据属性

 

4858美高梅 11

 

修改五个性子默许的特点:object.definePropertues(),以上代码在book对外国商人定义了七个数据属性(_year和edition)和3个做客器属性(year),与下部定义的靶子相同

 

4858美高梅 12

 

####4、读取属性的特色
要读取属性的风味,必须使用ECMAScript5的:Object.getOwnPropertyDescriptor()方法,这一个艺术接收七个参数:属性所在的对象和要读取其讲述符的属性名称

 

4858美高梅 13

4858美高梅 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’,而对那几个值的任何改造豆奶杯反映在那些岗位。

要修改属性暗中同意性格,必须选取ECMAScript5的Object.defineProperty()办法。该办法接收多个参数:属性所在对象,属性名和三个讲述符的靶子。描述符对象的习性必须是:configurable、enumrable、writable和value。安装在这之中的贰个或多个值,能够修改对应的性情值。例如:

要修改属性暗中同意性情,必须运用ECMAScript五的Object.defineProperty()格局。该方法接收七个参数:属性所在对象,属性名和3个描述符的靶子。描述符对象的品质必须是: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'
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'

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

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

4858美高梅 15

4858美高梅 16

同等的将configurable设置为false,表示无法从指标中删除属性。借使对那个性情调用delete,在严厉方式下会报错,而非严谨格局下怎么着也不会发生。

如出1辙的将configurable设置为false,表示不能够从指标中除去属性。假使对那性情格调用delete,在从严形式下会报错,而非严刻形式下什么也不会生出。

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

并且上边有关系设置configurable的值能够设置是不是可以修改属性的天性。1旦configurable设置成false,则属性就会被定义为不可配置的,而且就无法再把她变回可配置了。此时,再调用Object.defineProperty()方法设置特色值会报错,而且调用Object.defineProperty()方法时只要不钦点,configurable,enumerable,writable私下认可值是false,如下所示。

4858美高梅 17

4858美高梅 18

二、访问器属性

贰、访问器属性

访问器属性不带有数据值,包涵壹对getter和setter函数(三个函数非必需)。那多少个特征能够用来分别访问器属性和数目属性。访问器属性不能够直接定义,必须采用Object.defineProperty()来定义.。

做客器属性不带有数据值,包罗一对getter和setter函数(七个函数非必需)。那两日性状能够用来分别访问器属性和数量属性。访问器属性没办法平素定义,必须利用Object.defineProperty()来定义.。

读取访问器属性时,会调用getter函数,那一个函数负责重临有效的值;在写入访问器属性时,会调用setter函数并传到新值,这一个函数负责调控怎样处理数据,如下所示。

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

4858美高梅 19

4858美高梅 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;
    }
  }

});

 

 

 

 

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有