当前位置:首页 > 日记 > 正文

在ECMAscript5属性描述符的详细描述

在ECMAscript5属性描述符的详细描述
属性说明符是ES5的新概念,它是用来对对象的属性中添加更多的控制。

object.defineproperty

研究属性的描述,首先,我们要谈的object.defineproperty方法。这种方法的功能是定义一个新的属性或修改对象的现有财产。原型如下:

复制代码代码如下所示:

object.defineproperty(obj,支柱,描述符)
使用的例子:

复制代码代码如下所示:

var obj = { };

object.defineproperty(obj,'attr,{价值:1 });
以上的代码段添加一个属性指定属性和价值1的obj对象。量 uff1a

复制代码代码如下所示:

var obj = { };

obj.attr = 1;
相反,对object.defineproperty写作似乎更复杂,但是,其最大的奥秘在于它的第三个参数。

数据描述符

假设我们想要的属性是一个只读属性,我们可以将写入的数据描述符:

复制代码代码如下所示:

var obj = { };

object.defineproperty(obj,'attr,{)

值:1,

写:假

});

console.log(对象属性);

Obj.attr = 2; / / fail

console.log(对象属性);
上面的程序中可以发现两印刷属性的值是1,即写属性失败。然而,这样的结果是有点困惑,因为赋值语句的执行是不正常的,但是失败了。如果我们想在一大块代码中看到这样的问题,就很难发现它。事实上,只要代码在严格的模式下运行,就会出现异常。

复制代码代码如下所示:

严格使用;严格模式下。

var obj = { };

object.defineproperty(obj,'attr,{)

值:1,

写:假

});

obj.attr = 2; / /抛出异常
接下来,看看另一个数据描述符,枚举,可以控制是否可枚举属性。如果只有一个单一的属性是简单的定义,这个属性可以在枚举…在环。

复制代码代码如下所示:

var obj = { };

obj.attr = 1;

对于(var i在obj){ console.log(obj {我});}

枚举可以隐藏它:

var obj = { };

object.defineproperty(obj,'attr,{)

值:1,

枚举:假

});

对于(var i在obj){ console.log(obj {我});}
执行代码的上面部分会发现控制台没有输出因为attr属性不列举在这个时候。

在这里,你可能有一个问题。属性描述符能被修改吗例如,只读属性可以重新定义为可写吗事实上,它依赖于另一个可配置的数据描述符,它可以控制属性描述符是否可以更改。

复制代码代码如下所示:

var obj = { };

object.defineproperty(obj,'attr,{)

值:1,

可写的:false,

配置:真

});

object.defineproperty(obj,'attr,{)

真的写的:

});

obj.attr = 2;
上面的代码部分首先界定了属性为只读属性,然后将其重新定义为可写。因此ATTR写作是成功的。

访问描述符

访问说明符是类似于得到 / set访问器在面向对象。

复制代码代码如下所示:

var obj = { };

object.defineproperty(obj,'attr,{)

设置:功能(Val){这。_attr = math.max(0,瓦迩);},

得到:(){ return这个功能。_attr;}

});

obj.attr = - 1;

console.log(对象属性); / / 0
在上面的代码中,访问属性实际上是一个访问_attr,和最小值限制在0集函数。

获取属性描述符

属性描述符是较早设置的,那么如何得到集合描述符呢object.getownpropertydescriptor可以做这项工作。

复制代码代码如下所示:

var obj = { };

object.defineproperty(obj,'attr,{)

值:1,

可写的:false,

配置:真

});

VaR desc = object.getownpropertydescriptor(obj,'attr);

Console.dir(降序);
对象控制

的object.defineproperty,之前描述的,操作的对象的属性,和下面的三种方法操作对象直接。

object.preventextensions可以使得对象具有新特性:

复制代码代码如下所示:

var obj = { };

obj.attr = 1;

object.preventextensions(obj);

obj.attr2 = 2; / /失败
object.seal可以使对象属性值可以被修改(如果属性是只读的,即使属性值不可修改):

复制代码代码如下所示:

var obj = { };

obj.attr = 1;

Object.seal(obj);

obj.attr = 1.5;

删除obj.attr; / /失败
object.freeze能使物体完全可能修改:

复制代码代码如下所示:

var obj = { };

obj.attr = 1;

Object.freeze(obj);

obj.attr = 1.5; / /失败

obj.attr2 = 2; / /失败
然后你可能会问,你怎么知道某个对象曾经preventextensions,印章,或冻结答案是叫object.isextensible,object.issealed,和Object.isFrozen分别。使用这三个函数既简单又不麻烦。

总的来说,进一步严格控制对象可以通过属性说明符,加强程序的逻辑,唯一的事情是,ES5基本实现的IE9(IE9不支持严格的模式,考虑到国内IE8占有率)是比较高的,这东西是目前唯一用于浏览器和移动终端Node.js。

相关文章

PS图象处理软件CS5鼠绘逼真的美味

PS图象处理软件CS5鼠绘逼真的美味

美味可口,逼真,图象,处理软件,电脑软件,使用PS图象处理软件绘制生动的美味可口的红苹果教程:一般过程:先做出轮廓,填充黑色,然后慢慢的中间和边缘的光可以。本教程介绍的方法PS鼠绘教程红苹果超现实的生产红苹果十分逼真,其中使用了大量的工具! …

幸福签名:爱情,缝里的承诺

幸福签名:爱情,缝里的承诺

承诺,缝里,爱情,电脑软件,即使世界是我的敌人,我也不会逃避。 即使全世界都反对我,我还是要爱你。 爱,缝里的承诺 陷入爱情的缝隙 春花秋月,幸福永远。 在穷人的蓝天下,和绅士在同一个地方。 男人的谎言会在一夜之间欺骗女人。 女人的谎言可以欺…

有趣的签名对话2015

有趣的签名对话2015

有趣,电脑软件,你会为我而死吗; 我除了爱你,还能做什么! 你们还在等不平等;为什么; Ldquo,你跳我就跳!我不下楼就去上学了! 油歪了怎么读倒了;腻了;我也爱你; 零用钱薄情寡义,脂肪体不放弃。 结婚后你会来打破球场,为什么我自己的婚礼要粉碎; 好吧,你的胸…

恋人签名的经典调侃

恋人签名的经典调侃

恋人,经典,电脑软件,原谅我送给你的花礼服。 原谅我的打扮只为了想念你。 给你一个备忘录让你知道该怎么做。 给我一个忘记,让我忘记你所做的。 如果爱你是一个错误,我宁愿一错再错。 如果爱你是一种疾病,我宁愿被认为是无可救药的。 把它放在…

在PS图象处理软件的CS5制作圆形印

在PS图象处理软件的CS5制作圆形印

印章,图象,处理软件,过程,详细,本教程详细介绍PS图象处理软件的CS5的制作圆形印章的过程中的一个朋友。本教程制作的官方印章非常好。操作方法也很简单。非常适合初学者学习。建议像你这样的朋友一起学习这个教程。 本教程介绍我朋友对PS图…

DOM元素的大小和位置

DOM元素的大小和位置

位置,元素,大小,电脑软件,DOM,首先获取元素的CSS大小。 1。通过样式内联获取元素的大小。 复制代码代码如下所示: VaR箱= document.getelementbyid('box '); / /元素; box.style.width; / / 200px; box.style.height; / / 200px; 样式:只有在C…

美丽的帆船

美丽的帆船

帆船,美丽,电脑软件,本教程介绍了一个朋友到CDR绘制一个美丽的帆船的方法。这个教程很好。生产的帆船真漂亮,难度也不大。它适合初学者和中学学者学习和推荐它。让我们一起学习。 本教程是向大家介绍如何用CDR绘制一艘漂亮的帆船,希望大家喜…

PHP的pcntl多进程应用实例

PHP的pcntl多进程应用实例

应用实例,多进程,电脑软件,PHP,pcntl,本文阐述了PHP的pcntl多进程使用。分享给你供你参考。具体分析如下: PHP可以同时处理多个事务使用的pcntl系列函数在多个过程。例如,我需要从数据库中获取数据,80w做一系列的后续处理。此时,有一个单一的…

javascript字符串浏览器兼容性问题分析

javascript字符串浏览器兼容性问题分析

字符串,问题分析,浏览器兼容性,电脑软件,javascript,本文分析了javascript字符串浏览器的兼容性,供大家参考,具体分析如下: 首先看不兼容的写作,如果我想得到一些字符串。 复制代码代码如下:var str = 'aavvvcc; Console.info(STR { 0 }); 这种方法与…

js使用ajax动态地从xml文件中获取

js使用ajax动态地从xml文件中获取

获取数据,文件,动态,显示,电脑软件,本文演示了js使用Ajax动态地从XML文件中获取数据显示的方式,供大家参考: 下面的js代码通过Ajax动态地显示XML文件的内容到Web页面,而真正的页面不会刷新。 功能loadxmldoc(URL) { VaR技术; txt,X,XX,我; 如果(窗口…

美丽的CDR设计时尚海报春天的景色

美丽的CDR设计时尚海报春天的景色

景色,海报,春天,兴趣,美丽,本教程是美丽的CDR时尚设计海报,春天的风景引起人们的兴趣。方法介绍的朋友,教程出来的效果真的很漂亮,但是方法不难,新手可以来学习,推荐给朋友,可以来学习一下爱情。 本教程喜欢CDR学习者介绍美丽的CDR设计时尚海报教…

什么是pscs6没有3D功能没有一个立

什么是pscs6没有3D功能没有一个立

选择,3D,立方体,功能,电脑软件,什么是pscs6没有3D功能没有一个立方体的选择吗真正的photoshopcs6要花费很多钱,所以爱好本身是由百度的方法解决,但总有一些这样的功能。所以我们可以分享一个PS CS6扩展的三维立方体的选择没有。 真正的photo…