分享更有价值
被信任是一种快乐

JS属性的特性是什么

文章页正文上

这篇文章将为大家详细讲解有关JS属性的特性是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概念ECMAScript 5 中定义了一个名叫“属性描述符”的对象,用于描述了的各种特征。属性描述符对象有4个属性:configurable:免费云主机、域名可配置性,控制着其描述的属性的修改,表示能否修改属性的特性,能否把属性修改为访问器属性,或者能否通过delete删除属性从而重新定义属性。默认值为true。enumerable:可枚举性,表示能否通过for-in遍历得到属性。默认值为true。writable:可写性,表示能否修改属性的值。默认值为true。value:数据属性,表示属性的值。默认值为undefined。除了上面的属性,还有两个存取器属性,分别是get和set,可以代替value和writable。get:在读取属性时调用的函数。只指定get则表示属性为只读属性。默认值为undefined。set:在写入属性时调用的函数。只指定set则表示属性为只写属性。默认值为undefined。使用“属性描述符”对象只能在Object.defineProperty或Object.defineProperties中使用。API 用法Object.defineProperty:https://developer.mozilla.org…Object.defineProperties: https://developer.mozilla.org…当用Object.defineProperty或Object.defineProperties操作(新建或者修改)那些不允许创建或修改的属性时,会抛出类型错误异常。因为前面boy属性已经被设置为不可配置,所以这里修改writable会抛出类型错误异常。通过Object.getOwnPropertyDescriptor或者Object.getOwnPropertyDescriptors可以得到属性描述符。API 用法Object.getOwnPropertyDscriptor:https://developer.mozilla.org…Object.getOwnPropertyDescriptors:https://developer.mozilla.org…规则如果属性是不可配置的,则不能修改它的可配置性和可枚举性。如果存取器属性是不可配置的,则不能修改get和set方法,也不能将它转换为数据属性。如果数据属性是不可配置的,则不能将它转换为存取器属性;同时,也不能将它的可写性从false修改为true,但可以从true修改为false。如果数据属性是不可配置且不可写的,则不能修改他的值;如果是可配置但不可写,则可以修改他的值(实际上是先将它标记为可写的,然后修改它的值,***再将它标记回不可写)。其实这里所说的修改值,是通过Object.defineProperty或Object.defineProperties方法修改。通过直接赋值的方法在数据属性不可配置的情况下是不能修改属性值的。只指定set不能读,如果尝试读取该属性值,返回undefined。(红宝书上说在严格模式下才抛出异常,但没有)如果对象是不可扩展的,则可以编辑已有的自有属性,但不能给它添加新属性。操作对象可扩展性的API有三个:Object.preventExtensions、Object.seal、Object.freeze。API 用法Object.preventExtensions:https://developer.mozilla.org…Object.seal:https://developer.mozilla.org…Object.freeze:https://developer.mozilla.org…Object.isExtensions:https://developer.mozilla.org…Object.isSealed:https://developer.mozilla.org…Object.isFrozen:https://developer.mozilla.org…使用Object.preventExtensions可以将对象转换为不可扩展。使用Object.isExtensions来判断对象是否可扩展。使用Object.seal除了可以将对象转换为不可扩展的,还可以将对象的所有自有属性都转换为不可配置的。即不能给对象添加新属性,而且它已有的属性也不能删除或者配置(这里同样会遵循前面的规则)。使用Object.isSealed来判断对象是否封闭(sealed)。使用Object.freeze除了将对象转换为不可扩展的和将其属性转换为不可配置的之外,还可以将自有属性转换为只读。(如果对象设置了set,存取器属性将不会受影响,仍可以调用set方法,而且不会抛出异常,但如果set方法是改变该对象的属性,则不能修改成功)使用Object.isFrozen来检测对象是否冻结(frozen)。我对属性描述符很不熟悉,主要是因为平时用得少。不过最近,开始学写一些小的库(虽然很挫),就感觉属性描述符有使用的场景了。我暂时能想到的就是将库对象的一些属性设置为只读,以防止对象的一些属性被用户重写覆盖了。还有一个用法是在知乎和学vue的时候知道的,就是通过getter和setter实现“监听”对象属性的数据更新(在这里挖一个坑。后面学习一下这种方法,再写一篇“监听”对象属性的数据更新的文章)。关于JS属性的特性是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: 怎样解决Firefox下不支持outerHTML问题

这篇文章给大家分享的是有关怎样解决Firefox下不支持outerHTML问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。感谢各位的阅读!关于“怎样解决Firefox下不支持outerHTML问题”这篇文章就分享到这里了,希望以上…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册