很确定这是重复的,但我真的不知道要搜索什么。所以请忍受...
在下面的示例中,childRef
指向分配给someParentObj.someChildObj
的原始对象,因此,当someParentObj.someChildObj
附属于新对象时,childRef
仍引用原始对象。
是否有一种分配childRef
的方法,以便一旦将新对象分配给someParentObj.someChildObj
就会反映出来? (我主要是出于好奇而问这个问题,但在某些情况下,它可能允许较短的代码并派上用场。)
var someParentObj = {
someChildObj: {originalChildProp: ['some', 'array']}
};
window.parentRef = someParentObj;
window.childRef = someParentObj.someChildObj;
someParentObj.someChildObj = {differentChildProp: ['other', 'array']}
console.log(parentRef.someChildObj)
// Output: {differentChildProp: Array(2)}
console.log(childRef)
// Output: {originalChildProp: Array(2)} but I would like to have the new/different
// object on parentRef.someChildObj. Is it possible?
答案 0 :(得分:2)
在您要分配给window
的属性的情况下,在特定情况下 可以使用的一个选项是使window.childRef
成为 getter em>返回someParentObj.someChildObj
:
var someParentObj = {
someChildObj: {originalChildProp: ['some', 'array']}
};
window.parentRef = someParentObj;
Object.defineProperty(window, 'childRef', { get() { return someParentObj.someChildObj }});
someParentObj.someChildObj = {differentChildProp: ['other', 'array']}
console.log(parentRef.someChildObj)
console.log(childRef)
如果您不分配给对象的属性,例如childRef
是一个不在全局对象上的独立的块范围变量,那么这是不可能的。因此,如果要使用这种模式,请始终使用对象。
如果您可以操纵基础对象引用(例如,如果您不使用window
),则也可以使用代理服务器,它可以完成基本相同的操作,但是更加复杂且受支持较少。