详解JavaScript中的属性和特性_javascript技巧_脚本之家

其次有的:对象属性怎样举行分类

目的和类的涉及:在JavaScript中,对象和类未有别的涉及。那是因为ECMAScript中根本就从未有过类的定义,它的目的与任何依照类的言语中的对象是例外的。

这里大家将新建的习性name的性子设置为了configurable:false;由此上面删除属性的操作是行不通的。依照b,可见configurable,默许就是false,即便去掉也不足球学校订。

2.做客器属性不能够平昔定义,必得是用Object.defineProperty(卡塔尔国来定义。(通过这几个明显我们就会纯粹地判别出访谈器属性和数码属性了)

事情发生前涉嫌,访谈器属性不含有数据值,他们带有一对getter函数和setter函数。在读取访问器属性时,会调用getter函数,那一个函数负担再次回到有效的值;在写入访问器属性是,会调用setter函数并传播新值,那个函数肩负调控如哪个地方理数量。相近,由于无法由此JavaScript来直接待上访问获得访问器属性的风味,所以上边列出的表征将由[[]]括起来以作区分。

4.哪些运用Object.getOwnPropertyDescripter(卡塔尔方法读取属性的汇报符以读取属性的性状

var book={ _year:2004, edition:1};Object.defineProperty(book,"year",{ get:function(){
 return this._year; }, set:function{ if{ this._year=newValue; this.edition+=newValue-2004; } }});book.year=2005;console.log;//2
var person={};Object.defineProperty(person,"name",{ value:"zhuzhenwei"});console.log;//zhuzhenweiperson.name="heting";console.log;//zhuzhenwei

首先有个别:精晓JavaScript中指标的面目、对象与类的关联、对象与援引类型的关联

多少个必要深远驾驭的地方:

对此访问器属性来讲,那个目的的质量有configurable、enumerable、get和set;

其三有个别:属性中特性的知道

这边作者用对象字面量的方法创造了一个对象,然而从未同期成立方法和质量。而是采取了Object.defineProperty(State of Qatar方法来创立了品质和改动了私下认可值。这里将writable设置为false,于是前边笔者策画矫正person.name时,是对事情没有什么帮助的。

拜望器属性无法一直定义,必得利用Object.defineProperty(卡塔尔(قطر‎来定义,且该属性具有set和ger本性,于是能够判明,_year和edition是数码属性,而year是访谈器属性。
大家看看_year那几个数目属性前边是以_起来的,那一个一种常用的标识,用于表示只好通过对象方法访谈的性质。从地点的例子中得以观察get相当于描述符对象的多个主意,而_year正是在此个目的方法访谈的习性。而edition不只能够透过对象方法访谈,也足以由对象直接待上访谈。
book.year代表正在读取访谈器属性,此时会调用get函数,并回到了2002以此有效的值。
book.year=二零零七意味着写入访问器属性,这个时候会调用set函数并传到新值,就要二零零六传给newValue,这么些函数决定如哪个地点理数据。
那时候使用访问器属性的广阔方式-即设置一个属性的值会促成其余质量发生变化。

var book={};Object.defineProperties(book,{ _year:{ value:2004 }, edition:{ value:1 }, year:{ get:function(){ return this._year; }, set:function{ this._year=newValue; this.edition+=newValue-2004; } } }});var descriptor=Object.getOwnPropertyDescriptor;console.log;//2004console.log(descriptor.configurable);//false 因为通过Object.defineProperties()方法创建的属性的特性configurable enumerable都是falseconsole.log(typeof descriptor.get);//undefined 注意:这是数据属性,是不具有get特性的var descriptor=Object.getOwnPropertyDescriptor;console.log;//undefinedconsole.log(descriptor.enumerable);//falseconsole.log(typeof descriptor.get);//function get虽然是属性的一个特性,但是它也是函数。

小心:1.相对此数据属性,咱们发现访谈器属性中未有writable个性和value本性。那是因为访谈器属性不带有数据值,那么大家怎么当然就不行校正属性的值,更不用思忖value了。

数据属性温日用来存款和储蓄数据数值,访谈器属性不富含数据值

var book={};Object.defineProperties(book,{ _year:{ writable:true, value:2004 }, edition:{ writable:true, value:1 }, year:{ get:function(){ return this._year; }, set:function{ this._year=newValue; this.edition+=newValue-2004; } } }}); 

光天化日,一个目的不或者只享有二个性格,因而,定义三本个性的大概性相当大,于是JavaScript提供了Object.defineProperties(卡塔尔方法撤消那些主题素材。这一个主意选取五个参数,第三个是要定义属性所在的靶子,第三个是四个对象字面量方法创立的靶子,对象的性格名即为要定义的特姓名,对象的属性值又是多少个对象,那一个目的里的属性名和属性值分别是特色名和个性值

ECMAScript为了描述对象属性的种种特色,定义了特点那么些概念。也正是说性子不相同于属性,本性是为着描述属性的。上边,作者将分头授课:

2.做客器属性及其特色

留心看那些例子,那一个例子中本人删去了writable:false,为何依然无法改过呢?那是因为后边笔者在介绍特色时,前多少个默以为ture,是在创立对象并创建属性的情事下获得的。对于通过调用Object.defineProperty(卡塔尔国方法成立的性质,其前八个特点的默许值均为false,这里须求静心。

var person={};Object.defineProperty(person,"name",{ value:"zhuzhenwei", configurable:true});console.log;//zhuzhenweidelete person.name;console.log;//undefined 

威斯尼斯人官网 ,那个特点都负有默许值,然而假如那么些暗许值不是大家想要的,该如何做吧?当然就是修正啦!我们能够透过Object.defineProperty(卡塔尔方法来订正属性私下认可的特色。西班牙语difineProperty即为定义属性的情致。那么些方法接纳多个参数:属性所在的目的、属性的名字和多个描述符对象。此中第1个参数描述符对象是目的字面量的秘诀成立的,里面包车型的士属性和属性值实际上保存的是要纠正的特性和特点值。

var person={};Object.defineProperty(person,"name",{ writable:false, value:"zhuzhenwei"});console.log;//zhuzhenweiperson.name="heting";console.log;//zhuzhenwei 

假诺之前早就设置成为了false,那么前边再改成true也是隔着靴子挠痒痒的,即:假定把质量设置成为不可配置的,就无法再把它变回可配置了。

笔者们能够动用Object.getOwnPropertyDescripter(卡塔尔(قطر‎方法来收获给定属性的描述符。getOwnPropertyDescripter即为获得本人性质描述符的情致。这几个方法接受四个参数:属性所在的指标要要读取其描述符的性质名称。重回三个指标。

这里能够注脚,即便前一步我们随意默许的configurable:false,前面获得的仍然是不可配置。于是,能够得出结论,为了可配置,必得在率先次调用Object.defineProperty(卡塔尔(قطر‎函数时就将暗中同意的值纠正为true。

经过上面那几个例子来浓烈领悟:

[[Configurable]]:暗中同意值为true,a、表示能不可能通过delete删除属性进而再一次定义属性
b、能或无法改良属性的天性 c、能够把品质由访谈器属性修正为数量属性
[[Enumerable]]:暗中认可值为true,表示能不能够通过for-in循环重返该属性(所以:若是为false,那么for-in循环没办法枚举它所在的属性卡塔尔国
[[Get]]:在读取属性时调用的函数。暗许值为undefined
关键:天性能够是二个函数 [[Set]]:
在写入属性时调用的函数。暗中同意值为undefined 关键:性格能够是一个函数
由于get和set函数也归于属性的特点,那么他们就有极大希望出未来Object.defineproperty的第八个参数描述符对象的属性中。

目的的庐山真面目目:ECMA-262把对象定义为:冬天属性的聚合,其性质能够富含基本值、对象可能函数。即对象是一组未有特定顺序的值,对象的每一个属性或形式都有二个名字,而那些名字都映射到一个值。故对象的原形是四个散列表:在那之中是一组名值对,值能够是数码或函数。

数据属性及其特点 访问器属性及其特性怎么着运用Object.defineProperties(State of Qatar方法定义多个特色
如何行使Object.getOwnPropertyDescripter(卡塔尔国方法读取属性的叙述符以读取属性的特色

console.log;//Uncaught TypeError: Cannot redefine property: namevar person={};Object.defineProperty(person,"name",{ value:"zhuzhenwei",});console.log;//zhuzhenweiObject.defineProperty(person,"name",{ value:"zhuzhenwei", configurable:true});console.log;//Uncaught TypeError: Cannot redefine property: name

下边通过几个例证来深远领会。

1.数量属性及其特点

知道JavaScript中目的的本色、对象与类的涉及、对象与引用类型的关联
对象属性怎么样开展归类 属性中性格的明亮

目的和援用类型的关系:对象和援用类型并不是等价的,因为每一个对象都以基于二个援用类型创设的。

做客器属性多用来get/set操作

以上正是本文的全部内容,希望本文的剧情对大家的学习或许干活能推动一定的增派,倘诺有问号大家能够留言调换,同一时间也期望多多指教脚本之家!

var person={};Object.defineProperty(person,"name",{ value:"zhuzhenwei", configurable:false});console.log;//zhuzhenweiObject.defineProperty(person,"name",{ value:"zhuzhenwei", configurable:true});console.log;//Uncaught TypeError: Cannot redefine property: name

刚好大家说过,数据属性是用以存款和储蓄数据数值的,由此数据属性具有一个数据值的义务,在这里个职责可以读取和写入值。数据属性有4个描述其行事的特征,由于ECMAScript规定:在JavaScript中不能够向来访谈属性的特点,所以大家把它身处两组方括号中。如下:

JavaScript中质量和特征是完全不一致的四个概念,这里笔者将基于自个儿所学,来浓重了然JavaScript中的属性和特色。

3.什么样利用Object.defineProperties(卡塔尔(قطر‎方法定义多个特点

由布局函数或对象字面量方法创设的指标中存有属性和艺术(只要涉及属性和方式,它们必然是归于对象的;只要涉及对象,它一定是颇有属性和办法的,当中属性又可分为数据属性和做客器属性,他们的区分如下:

var person={};Object.defineProperty(person,"name",{ value:"zhuzhenwei", configurable:false});console.log;//zhuzhenweidelete person.name;console.log;//zhuzhenwei 

在那自个儿将暗许的configurable的值由暗中认可的false改善为了true,于是成为了可配备的,那么最后就成功删除了。

[[Configurable]]:暗中认可值为true,a、表示是或不是通过delete删除属性进而再度定义属性
b、能还是不可能修正属性的特征 c、能够把质量由数据属性修改为访问器属性
[[Enumerable]]:私下认可值为true,表示能或无法通过for-in循环重临该属性(所以:假如为false,那么for-in循环无法枚举它所在的习性卡塔尔
[[Writable]]:暗中认可值为true,表示是还是不是改过属性的值,那是与[[Configurable]]详解JavaScript中的属性和特性_javascript技巧_脚本之家。分化之处。
[[Value]]:暗许值为undefined,这么些值即为属性的属性值,大家得以在这里个地点上读取属性值,也足以在这里个岗位上写入属性值。
在乎:上述的默许是指通过结构函数或对象字面量创建的靶子所自个儿具有的性情,并非下边要介绍的Object.defineProperty(卡塔尔(قطر‎方法

对于数据属性来说,这一个目的的特性有configurable、enumerable、writable和value。

发表评论

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

相关文章