对象保留引用的轨迹,但不保留在对象中

随你

将对象传递为参数并使用Object.create使用它来创建单独的对象时,将获得一个空对象。但是,如果您随后使用此新对象引用在初始对象中设置的特定参数,则将获得初始对象的参数值。

我希望这些值包含在新对象中,或者至少不能在其中包含。

var o = { baz: [] };
o.rrr = { a: 1 };
console.log( o, '"o" before timeout called' );

setTimeout(function() { n(o) }, 1000); // setting delay

function n(x) {
  console.log( 'x - what we passed', x );
  var obj = Object.create( x );
  console.log( obj, '"obj" before enhancements is empty' );
  console.log( obj.rrr, 'but "obj.rrr" do exist' );
  obj.baz = [];

  obj.baz.push( 'new value' );
  console.log( obj, '"obj" after enhancements contain "baz" only' );
  console.log( obj.rrr, 'but "obj.rrr" still exist' );
  console.log( o, '"o" after timeout ended' );
  console.log( '---- THE END ----' );
}

console.log( o, '"o" after timeout called' );

为何如此?

您可以在保留结构的同时摆脱那些引用吗?

您是否可以一开始就获得新对象中设置的那些值(例如克隆它)?

Object.create()方法使用x新创建的对象的原型创建一个新对象。因此,该属性rrr直接在中不存在obj它存在于[[Prototype]](或__proto__)中

var x = { prop: 1 }
var y = Object.create(x)

console.log(y.prop) // 1
console.log("prop" in y) // true
console.log(y.__proto__ === x) // true
console.log(y.hasOwnProperty("prop")) // false

所述in如果指定的属性是在指定的对象或操作员返回true其原型链因此,在这种情况下,它返回true。

但是,hasOwnProperty()另一方面,该方法返回一个布尔值,该布尔值指示对象是否具有作为其自己的property的属性这就是y.hasOwnProperty("prop")即使y.prop返回1也返回false的原因

如果要直接在中获取属性y,则可以使用Object.assign()这会将所有可枚举的自身属性从复制x到空目标对象。

var x = { prop: 1 }
var y = Object.assign({}, x)

console.log(y.prop) // 1
console.log(y.hasOwnProperty("prop")) // true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java和虚拟内存:控制/影响哪些对象保留在主内存中?

将UITableView填充保留在标头上,但不保留在IOS7的分隔符中

使用SailsJS / Express在请求之间将对象保留在内存中

使用JNI从Java调用之间将本机对象保留在内存中

是否可以将对象保留在内存中以实现比Redis或Memcached更快的缓存存储?

ARC是否保留在方法参数内分配的对象

三个js适当地从场景中删除对象(仍保留在HEAP中)

为何编组对象不保留在本机代码中修改的值?

为什么用send_data发送的对象似乎保留在内存中?

在Python Falcon的api调用之间将对象保留在内存中

ActiveRecord:将重复的对象保留在.where查询中

NSMutableArray将对象保留在indexSet

未引用的对象是否有可能保留在内存中并调用目标操作?

C ++对象实例被销毁后仍保留在列表中

在删除对象的过程中,将用户定义的函数保留在全局环境中

删除对对象的引用,但如果在其他位置引用,则将对象保留在内存中

为什么创建后属性值不保留在对象中?

Android是否将视图对象层次结构保留在内存中?

删除对象后,观察者仍保留在调度表中

更改密码不保留在Linux影子文件中

在对jwt进行签名时,最好仅将user_id或整个用户对象保留在有效负载中?

jQuery Mobile对象保留在内存中

对象已保留在领域中

窗口不保留在单个工作区中

通过java中的两个属性键将(最小)对象保留在集合中

json-ld将某些对象保留在纯json中

JPA 实体不保留在我的额外字段中

将通用 avro 记录序列化为 Array[Byte] 将架构保留在对象中

更新对象角度 5+ 时如何将对象值保留在表单中?