如何在js中引用?

时间:2017-11-27 21:32:32

标签: javascript monkeypatching

怎么知道js? :d

const

现在 let obj = {} let anotherObj = obj 包含anotherObj值作为{}的参考。 因此obj仅提及anotherObj。但是,当我们将新值重新分配给obj时 为什么以这种方式在js中分配? 我知道这个功能提供了有用的monkeypatching技术

obj

变量 anotherObj // {} obj = null anotherObj // {} 仍包含anotherObj值。 但是 {}anotherObj上的引用,据我所知它应包含obj null

1 个答案:

答案 0 :(得分:1)

你误解了"引用"的方式。工作。你在C中pointers喜欢这样思考。当你看到......时,

var obj = {};
var anotherObj = obj;

...您正在考虑obj引用一个对象和引用一个对象的anotherObj引用obj。您正在考虑一系列参考文献。但是,除非您使用pointers或其他地址空间引用,否则分配不适用于大多数语言。

相反,var obj = {};会在某个内存位置创建一个对象,而obj现在包含该内存位置。当您执行var anotherObj = obj;时,obj将被评估为该内存位置,并且该内存位置现在被指定为anotherObj的值。现在,而不是anotherObj指向obj,我们同时将objanotherObj指向obj的相同内存位置。

因此,当我们执行obj = null时,我们只会更改obj指向的值 - anotherObj仍然指向我们创建的对象的内存位置

据我所知,无法更新所有对象引用,甚至无法手动删除对象(例如,将其替换为null,就像您尝试做的那样)。如果您的目的是为了管理对象生命周期而做类似的事情,那么您将会感到失望。相反,您需要采取其他方法,例如将对象存储在全局变量中,然后使用该全局引用而不是几个本地引用。