Object.defineProperty是否有权访问对象的内存地址?

时间:2015-06-09 16:18:24

标签: javascript object prototype

var obj = {};
Object.defineProperty(obj, "name", {
  value: "john doe"
});
console.log(obj.name); // john doe

Object.defineProperty如何为对象分配新属性?!

我们不会在新变量中调用它,那么如何在不返回new的情况下将其分配给主对象?!

是否使用变量的内存地址来分配属性?!

1 个答案:

答案 0 :(得分:0)

是的,确实如此。当你传递它时,它会从obj获得该地址。所有这些都发生在幕后。

实际上,上述陈述并非完全正确。根据规范,JavaScript获得的是对象的引用大多数实现使用内存地址作为引用,但规范并不需要它,而某些实现则以不同方式执行。例如,Narcissus引擎是用JavaScript编写的,但JavaScript无法访问内存地址,因此Narcissus必须以另一种方式实现引用。

但引擎实现引用的方式并不重要。重要的是这个引用存储在幕后的obj中。 在C或C ++等语言中,您必须取消引用才能获取基础对象中的数据,但JavaScript会自动为您执行此操作。这就是为什么你没有听到JavaScript中被引用过的引用;由于自动处理,通常不需要谈论它们。但他们在那里。