当前位置: 首页 > 知识库问答 >
问题:

o从新创建的对象中bject.create和删除属性

仉峻
2023-03-14

如果Object.create创建对象的新深度副本,从新创建的对象中删除属性后会发生什么?

预期输出:未定义

实际产出: Karna

密码

var obj1 = {name:"Karna",loc:"Bengaluru"};

var obj2 = Object.create(obj1);

delete obj2.name;

console.log(obj2.name);

你能帮我理解为什么吗。仍然引用obj1属性的名称?

共有2个答案

孙京
2023-03-14

有两点你应该注意:1-对象。create不复制原始对象,它创建一个新对象,参数对象作为所创建新对象的原型。(prototype属性不是可配置属性)2-delete操作符只处理对象的可配置属性。

因此,原型属性不能被删除运算符删除,因为它们是不可配置的。

商夜洛
2023-03-14

Object.create创建一个新对象,参数对象作为新创建对象的原型(参考新创建对象的__proto__)。它没有将Obj1的属性添加到Obj2。因此,如果您在Obj2上调用删除,它将删除Obj2的属性,而不是原型中的属性。

例子:

var obj1 = { name: 'John' }

var obj2 = Object.create(obj1);

console.log(obj2.__proto__ === obj1) // returns true

console.log(obj2.hasOwnProperty('name')) // returns false; 

console.log(obj2.name) // returns John 

delete obj2.name; // returns true

console.log(obj2.name) // returns John, since delete will not traverse the prototype chain to delete keys
 类似资料:
  • 从 JSON 对象删除除了指定属性之外的任何其他属性。 使用 Object.keys() 方法遍历给定的 JSON 对象并删除给定数组中不包含的 keys 。 如果你传递一个特殊的键 childIndicator ,它也会深入地将这个函数应用到内部对象中。 const cleanObj = (obj, keysToKeep = [], childIndicator) => { Object.k

  • 问题内容: 如何通过匹配对象属性从数组中删除对象? 请只使用本机JavaScript。 我在使用接头时遇到麻烦,因为每次删除的长度都会减少。使用克隆并在原始索引上进行拼接仍然会给您带来长度减少的问题。 问题答案: 我以为你用过这样的东西? 修复bug所需要做的就是在下一次减少,然后(也可以选择向后循环): 为了避免线性时间删除,可以编写要 保留 在数组上的数组元素: 为了避免在现代运行时中进行线性

  • 问题内容: 如何删除JavaScript对象中或JavaScript对象中的所有属性? (问题与此数组类似) 问题答案: 您可以遍历对象: 如果您担心此属性删除不会使对象的proptype链运行起来,则还可以: 有关null与未定义的一些注意事项:

  • 问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版

  • 问题内容: 我有一个JSON: 我试图删除所有以 “ umb_” 开头的属性。这在json.net中可能吗? 输出将是这样的: 使用删除我能够做到,但是不能一次全部完成。 有什么建议吗? 问题答案: 您可以先解析字符串: 更新 或: 更新#2 您可以在子句中指定更多条件: 要么 或任何您需要的。

  • 本文向大家介绍MongoDB的创建、更新和删除,包括了MongoDB的创建、更新和删除的使用技巧和注意事项,需要的朋友参考一下 概要   下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D(删除);由于R(查询)操作相对来说内容比较多,也比较繁琐,   同时使用频率也比较高,所以下一篇会拿出来单独介绍。废话不多说,连上服务器,我们直接进入正题! 一、创建   按照我