最新公告
  • 欢迎您访问爱上源码网,分享精品整站源码,网站模板,游戏源码,APP小程序源码以及视频教程免费下载;服务永无止境!立即加入我们
  • JavaScript 对象可以做到的几件事

    除了普通的对象属性赋值和遍历之外,我们还可以使用 JavaScript 对象执行许多其他操作。在本文中,我们将了解如何使用它们,包括访问内部属性、操作属性描述符和继承只读属性。

    1. 访问内部属性

    JavaScript 对象无法以常规方式访问的内部属性。内部属性名由双方括号[[]]包围,在创建对象时可用。

    内部属性不能动态地添加到现有对象。

    内部属性可以在某些内置 JavaScript 对象中使用,它们存储ECMAScript规范指定的内部状态。

    有两种内部属性,一种操作对象的方法,另一种是存储数据的方法。例如:

    • [[Prototype]] — 对象的原型,可以为null或对象

    • [[Extensible]] — 表示是否允许在对象中动态添加新的属性

    • [[PrivateFieldValues]] — 用于管理私有类字段

    2. 属性描述符对象

    数据属性包含了一个数据值的位置,在这个位置可以读取和写入值。也就是说,数据属性可以通过 对象.属性 访问,就是我么平常接触的用户赋什么值,它们就返回什么,不会做额外的事情。

    数据属性有4个描述其行为的特性(为了表示内部值,把属性放在两对方括号中),称为描述符对象。

    value 描述符是属性的数据值,例如,我们有以下对象 :

    let foo = {
      a: 1}

    那么,a 的value属性描述符为1。

    writable是指该属性的值是否可以更改。 默认值为true,表示属性是可写的。 但是,我们可以通过多种方式将其设置为不可写。

    configurable 的意思是可以删除对象的属性还是可以更改其属性描述符。 默认值为true,这意味着它是可配置的。

    enumerable 意味着它可以被for … in循环遍历。 默认值为true,说明能通过for-in循环返回属性

    将属性键添加到返回的数组之前,Object.keys方法还检查enumerable 描述符。 但是,Reflect.ownKeys方法不会检查此属性描述符,而是返回所有自己的属性键。

    Prototype描述符有其他方法,get和set分别用于获取和设置值。

    在创建新对象, 我们可以使用Object.defineProperty方法设置的描述符,如下所示:

    let foo = {
      a: 1}Object.defineProperty(foo, 'b', {
      value: 2,
      writable: true,
      enumerable: true,
      configurable: true,});

    这样得到foo的新值是{a: 1, b: 2}。
    我们还可以使用defineProperty更改现有属性的描述符。 例如:

    let foo = {
      a: 1}Object.defineProperty(foo, 'a', {
      value: 2,
      writable: false,
      enumerable: true,
      configurable: true,});

    这样当我们尝试给 foo.a 赋值时,如:

    foo.a = 2;

    如果关闭了严格模式,浏览器将忽略,否则将抛出一个错误,因为我们将 writable 设置为 false, 表示该属性不可写。
    我们还可以使用defineProperty将属性转换为getter,如下所示:

    'use strict'let foo = {  a: 1}Object.defineProperty(foo, 'b', {  get() {    return 1;
      }
    })

    当我们这样写的时候:

    foo.b = 2;

    因为b属性是getter属性,所以当使用严格模式时,我们会得到一个错误:Getter 属性不能重新赋值。

    3.无法分配继承的只读属性

    继承的只读属性不能再赋值。这是有道理的,因为我们这样设置它,它是继承的,所以它应该传播到继承属性的对象。

    我们可以使用Object.create创建一个从原型对象继承属性的对象,如下所示:

    const proto = Object.defineProperties({}, {
      a: {
        value: 1,
        writable: false
      }})const foo = Object.create(proto)

    在上面的代码中,我们将proto.a的 writable 描述符设置为false,因此我们无法为其分配其他值。

    如果我们这样写:

    foo.a = 2;

    在严格模式下,我们会收到错误消息。

    总结

    我们可以用 JavaScript 对象做很多我们可能不知道的事情。

    首先,某些 JavaScript 对象(例如内置浏览器对象)具有内部属性,这些属性由双方括号包围,它们具有内部状态,对象创建无法动态添加。

    JavaScript对象属性还具有属性描述符,该属性描述符使我们可以控制其值以及可以设置它们的值,还是可以更改其属性描述符等。

    我们可以使用defineProperty更改属性的属性描述符,它还用于添加新属性及其属性描述符。

    最后,继承的只读属性保持只读状态,这是有道理的,因为它是从父原型对象继承而来的。

    推荐教程: 《javascript教程》

    以上就是JavaScript 对象可以做到的几件事的详细内容,更多请关注爱上源码网其它相关文章!

  • 微信
  • 分享
  • 相关标签:JavaScript
  • 本文转载于:segmentfault,如有侵犯,请联系916990011@qq.com删除
    • 上一篇:JS实现斐波那契列数的三种方法
    • 下一篇:什么是跨域问题并且如何解决

    相关文章

    相关视频

    • javascript数据类型分为哪两类
    • javascript对象是如何定义的
    • 如何理解javascript中的函数概念
    • javascript如何实现将两个数组合并
    • JavaScript 对象可以做到的几件事
    • JavaScript逻辑运算符
    • JavaScript函数的调用(1)
    • JavaScript变量的作用域

    本文有爱上源码下载完入驻作者发布,如果对您版权造成侵害,可以联系本站站长管理进行维权删除,本站收到维权24小时内进行处理,谢谢您关注23ym.cn!
    本站分享大量程序员技术文章以及对编程开发的初级入门教程,包括图文讲解笔记和高清视频下载~

    重要声明:
    1.本站视频教程,软件及网站源码版权均属于原作者所有,您必须在下载后的24个小时之内,从您的电脑中删除!非法商业用途,后果自负!
    2.本站不保证所提供下载资源的安全性和完整性,仅供下载学习之用!如链接失效或资源含外站广告,请联系客服处理!给予奖励!
    3.本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!本站提供有偿服务!如有侵权请联系在线客服!
    4.如您手中有优质资源或教程,可以自助投稿发布,成功分享后有奖励和额外收入!
    5.如您需要正版微擎模块可联系本站客服,我们有价值30w+商业微擎应用出售微擎坑位和招收代理!
    6.400电话/软著/ICP,EDI许可证/商标特价办理中!
    爱上源码下载网 » JavaScript 对象可以做到的几件事

    常见问题FAQ

    从网站下载的源码都有安装教程么?不会安装怎么办?
    本站发布的网站源码和模板资源大部分在压缩包内都有教程,如您不会安装可以联系本站在线技术进行付费安装。
    爱上源码的所有源码都是亲测能正常运行的么?
    本站目前拥有资源10w+,包含整站源码,网站模板,游戏源码,小程序源码,视频教程,破解软件等,每天也在测试更新;因时间和精力有限我们无法对资源进行一一测试,只能保证所分享资源内容无误,希望理解。
    我手中的优质资源可以在你这换钱或者VIP么?
    爱上源码支持投稿,欢迎发布您手中的优质资源进行售卖;本站VIP支持免费获取,目前邀请10人注册爱上源码即可免费获取VIP。
    爱上源码除了资源分享还有其他业务没?
    【价值30W+微擎模块出售正版商业微擎坑位及招收代理,详情咨询本站客服!】我们团队目前运营并推广几套商业化saas智能小程序系统能满足大部分小程序开发需求,并由SaaS和独立部署版商城小程序系统;另外销售400电话,各种ICP/EDI资质证书办理,软著和商标注册服务等。

    发表评论

    • 32会员总数(位)
    • 35644资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 656稳定运行(天)

    提供最优质的资源集合

    开通VIP 源码下载