Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.defineProperty是否可以访问对象的内存地址?_Javascript_Object_Prototype - Fatal编程技术网

Javascript Object.defineProperty是否可以访问对象的内存地址?

Javascript Object.defineProperty是否可以访问对象的内存地址?,javascript,object,prototype,Javascript,Object,Prototype,如何Object.defineProperty为对象分配新属性 我们不在新变量中调用它,那么这将如何分配给主对象而不返回new 它是否使用变量的内存地址来分配属性 是的,是的。当您传入该地址时,它会从obj获取该地址。所有这些都发生在幕后。 事实上,上述说法并不完全正确。根据规范,JavaScript得到的是一个称为对象引用的东西大多数实现使用内存地址作为引用,但规范不需要它,有些实现的做法有所不同。例如,Narcissus引擎是用JavaScript编写的,但JavaScript无法访问内存地

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

我们不在新变量中调用它,那么这将如何分配给主对象而不返回new


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

是的,是的。当您传入该地址时,它会从
obj
获取该地址。所有这些都发生在幕后。

事实上,上述说法并不完全正确。根据规范,JavaScript得到的是一个称为对象引用的东西大多数实现使用内存地址作为引用,但规范不需要它,有些实现的做法有所不同。例如,Narcissus引擎是用JavaScript编写的,但JavaScript无法访问内存地址,因此Narcissus必须以另一种方式实现引用


但是引擎实现引用的方式并不重要。重要的是,该引用存储在
obj
后台<在C语言或C++语言中,为了得到底层对象中的数据,你必须去引用它,但是JavaScript为你自动地做< /强>。这就是为什么在JavaScript中很少提到引用的原因;由于自动处理,通常不需要太多讨论它们。但是它们在那里。

您正在传递要定义其属性的对象作为第一个参数。。。我不清楚你在问什么?基本上类似于
obj.foo=42完成它。对象是可变值。您能解释一下您认为这与
obj[“name”]=“john doe”
obj.name=“john doe”
有何不同吗?或者这些形式也会给你带来同样的困惑吗?@JamesThorpe@apsillers我的意思是,当它作为一个片段传递时,函数不能更改引用对象,应该返回新对象,但在这种情况下,这个方法会更改引用对象。@rf7啊,因此,您也对类似于
函数mutateFoo(o){o.foo=5;}的东西感到困惑;var obj={};突变(obj),是吗?您的困惑是因为您认为值在传递到函数时是不可变的。
var obj = {};
Object.defineProperty(obj, "name", {
  value: "john doe"
});
console.log(obj.name); // john doe