JavaScript - 将对象文字作为第二个参数传递给 Object.create()

2023-11-29

参考下面的JavaScript代码片段,问题:

  1. 为什么对象字面量 {item: {value: "foobar"}} 在分配给变量时(如第 1 行)与作为参数传递给 Object.create() (如第 5 行)时的行为不同?

  2. 第 5 行和第 8 行有什么区别 - 即为什么第 5 行是将第二个参数传递给 Object.create() 的正确方法,而不是第 8 行(覆盖委托中的 item 属性)?

代码片段:

 1 var obj = {item: {value: "foobar"}};
 2 console.log(obj.item);            // [object Object]
 3 console.log(obj.item.value);      // foobar

 4 var delegate = {item: "xxx"};
 5 var obj1 = Object.create(delegate, {item: {value: "foobar"}});
 6 console.log(obj1.item);          // foobar
 7 console.log(obj1.item.value);    // undefined

 8 var obj2 = Object.create(delegate, {item: "bar"});
 9 console.log(obj2.item);          // <nothing>

发生这种情况是因为根据此参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

Object.create接收一个以“属性描述符”作为第二个参数的对象,而不是简单的key:value pairs.

请参阅这篇博文:http://ejohn.org/blog/ecmascript-5-objects-and-properties/有关属性描述符的描述。

属性描述符是一个对象,它描述每个属性,而不仅仅是属性值。从你的代码片段来看:

2 obj.item // [object Object] since item is the object {value:"foobar¨}

6 obj1.item // foobar, the descriptor says that the value 
            // of item is "foobar"

7 obj1.item.value // undefined since item="foobar", value is part of
                  // the object that describes "item" not item itself

9 obj2.item  // nothing because the descriptor that you passed 
             // for item is incomplete
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript - 将对象文字作为第二个参数传递给 Object.create() 的相关文章

随机推荐

  • 使用显卡代替 GDI+ 进行图像操作

    我有一个问题 这可能是一个白日梦 但我想知道我的 Stack Overflow 同伴是否可以帮助我 在我工作的公司 我们这样做billions每月的图像处理次数 基本上 我们拍摄一张巨大的图像 将其切成 256 像素的方形图像 对它们进行颜
  • Mongoose 架构:如何设置数组中的最大项目数?

    我有一个猫鼬模式 其中包含一个对象数组和一个字符串数组 在这两种情况下 如何设置验证器以将可以插入的项目数量限制为 10 个 todoList type String pictures type String 没有默认值maxlength数
  • 如何删除带孔多边形上的顶点(节点)(Google 地图 V3)

    我从以下位置获取了这个示例 解决方案 伊恩 格兰杰 但我添加了一个带内孔的多边形 这个例子对于外部顶点路径工作正常 但对于内部顶点路径则不行 我需要为内部和外部节点实现事件监听器 因为在内部顶点发生火灾事件时 删除外部顶点 效果不太好 有人
  • Case 语句 - 根据条件值隐藏/取消隐藏

    如果 case 值为 否 我会尝试隐藏一列 我将其保存在工作表中 而不是模块中 Private Sub Worksheet Change ByVal Target As Range ActiveSheet Activate If Not A
  • 将用户的键盘输入过滤到 JTextField (swing)

    如何在输入 JTextField 之前限制键盘输入 swing 我只想允许用户输入 0123456789abcdef 个字符 且不超过 1 个 or char 我的 JTextField 是单行输入字段 thanks 您可以通过以下方式实现
  • 为什么我们需要 SqlCeCommand.Parameters.AddWithValue() 来插入值?

    我有一个 C WPF 桌面应用程序 它使用 SQL Compact 3 5 作为其嵌入式数据库 在插入函数中有 using SqlCeCommand com new SqlCeCommand INSERT INTO FooTable VAL
  • 我可以根据字段的值获取枚举吗?

    我想根据其字段值获取特定的枚举 Enum public enum CrimeCategory ASBO Anti Social Behaviour BURG Burglary CRIMDAM Criminal Damage And Arso
  • Python 优雅的 int(string,base) 逆函数

    Python 允许使用 2 36 范围内的任何基数从字符串转换为整数 使用 int string base 我正在寻找一个优雅的反函数 它接受一个整数和一个基数并返回一个字符串 例如 gt gt gt str base 224 15 ee
  • Python从父级子文件夹导入

    我有个问题 我有一个这样的目录设置 folder main py stuff init py function py items init py class py 我的问题是如何将 class py 导入到 function py 中 此设
  • Android 中的嵌套形状

    我正在尝试绘制一个具有三个矩形的形状 纯色 gradient 白线 我怎么做 当我尝试这个时 它不起作用 布局具有父颜色
  • 单击时 WPF 按钮闪烁为白色

    我刚刚创建了 wpf 按钮 当我单击该按钮时 它会像闪烁一样变为白色 并在释放按钮时变回原始颜色 可能是什么问题呢 我没有使用任何效果 下面是我的按钮 xaml 请指教
  • 将 404 错误页面重定向到 Tomcat 中 Spring MVC Web 应用程序的自定义页面

    我正在使用 tomcat 7 并且在 tomcat 7 中构建并部署了 Spring MVC web 应用程序 并且它工作得非常好 我想要的是 每当我的服务器上发生 404 错误时 它应该被重定向到我在 web 应用程序中构建的自定义页面
  • openGL glx.h 缺少 xcode 4 mac lion 形式

    我正在尝试设置一个示例项目 它使用 GLSDK 我使用 premake 设置它 将项目基础 sdk 设置为 10 6 因为我使用的是 xcode 4 但是当我尝试编译时 我从示例文件中得到 GL gl h not found 因此 我手动添
  • ASM:“cmp”的操作数类型不匹配

    我正在执行 x86 汇编代码 并且不断收到此错误 cmp 的操作数类型不匹配 它出现的代码行是 cmpb rdi 0 在 AT T 语法 您使用的语法 中 指令有一个尺寸后缀来指示操作数的大小 尺寸后缀为 b byte 1 bytes w
  • 泛型超级与扩展

    正当我以为我终于理解了泛型时 我遇到了以下示例 public class Organic
  • SQLAlchemy 为每个查询添加注释

    我试图让 SQLAlchemy 为我提交的每个查询添加注释 我从文档中知道我可以做这样的事情 from sqlalchemy sql expression import Insert compiles Insert def prefix i
  • 用于连字符、下划线和数字的 Elasticsearch 自定义分析器

    诚然 我对ES的分析部分不太熟悉 这是索引布局 mappings event properties ipaddress type string hostname type string analyzer my analyzer fields
  • 如何滚动列表视图背景与项目

    我设置了一个图像作为Listview背景 如果我想随着项目滚动它 我该怎么办 例如 1是背景 如果我向下滚动Listview 它将改变从 1 1 1 1 1 1 1 to 1 1 1 1 1 1 1 也许我可以扩展listview并覆盖di
  • 如何使用Python创建一个简单的饼图

    我一直在尝试使用 python 生成一个简单的饼图 仅使用两个变量 代表百分比 我总是遇到错误 vcvarsall bat not found安装时matplotlib包 为此是否不可避免地安装 Visual Studio 不需要安装 Vi
  • JavaScript - 将对象文字作为第二个参数传递给 Object.create()

    参考下面的JavaScript代码片段 问题 为什么对象字面量 item value foobar 在分配给变量时 如第 1 行 与作为参数传递给 Object create 如第 5 行 时的行为不同 第 5 行和第 8 行有什么区别 即