有没有可能;“覆盖指针”;用JavaScript?

有没有可能;“覆盖指针”;用JavaScript?,javascript,Javascript,可以用JavaScript模拟下面的代码吗 var ref = new Reference(); var arr = [1, 2, ref]; ref.overwrite(3); console.log(arr); // output: [1,2,3] 此代码将ref放置在数组中,然后将其覆盖,并将其引用完全替换为3。我们可以通过存储父对象和索引来执行类似的操作: var arr = [1, 2, null]; var ref = {object: arr, index: 2}; ref.ob

可以用JavaScript模拟下面的代码吗

var ref = new Reference();
var arr = [1, 2, ref];
ref.overwrite(3);
console.log(arr); // output: [1,2,3]
此代码将
ref
放置在数组中,然后将其覆盖,并将其引用完全替换为
3
。我们可以通过存储父对象和索引来执行类似的操作:

var arr = [1, 2, null];
var ref = {object: arr, index: 2};
ref.object[ref.index] = 3;
console.log(arr); // output: [1, 2, 3]
但这不是一回事,因为
ref
必须跟踪使用它的所有父对象。我感兴趣的是使用
ref
作为占位符,将其存储在多个位置,然后用其他内容替换所有出现的内容,而不跟踪其使用位置。我们也可以“几乎”这样做:

var ref = {value: null};
var arr = [1, 2, ref];
ref.value = 3;
console.log(arr); // output: [1, 2, {value: 3}]

但这并不能完全摆脱包装对象。

不,JavaScript没有引用或指针作为值。你总是需要一些包装器对象(你可以随意改变,但不能替换),不可能创建自定义的原语值。

没有办法真正做到你想做的事情,但是根据你使用它的方式,你可以伪造它。您可以使用valueOf返回所需内容。这里的示例演示如何使用它对一个数字数组求和,而不是修改它并再次运行它

const sum=arr=>arr.reduce((t,i)=>t+i,0)
函数MyRef(n){
这个数字=n;
this.overWrite=n=>this.number=n
}
MyRef.prototype.valueOf=函数(){
返回此.number;
};
常数参考=新的MyRef(100);
常量myArray=[1,2,ref]
console.log(总和(myArray))
参考文献(3)

log(sum(myArray))
您可以使用js getter和setter或代理来访问ArrayDeployment。根据您的需要,有很多抽象可以帮助您创建包装器对象,使它们使用起来更轻松。您可能想在特定的用例中提出一个新的问题,比如一个生成大数组的函数,用很多值填充它。除了一些特定的位置,函数还没有值。因此,一种方法是将
null
放在这些位置上,然后再次迭代数组,用(现在已知的)值替换所有出现的
null
。我只是想知道是否有可能用我描述的方法避免第二个循环(这将允许我将
ref
放在这些位置上,然后只
ref.rewrite(value)
)。您可以为数组的这些位置定义getter,但getter的成本很高。将对象放入该数组会更好(效率更高,在基准测试中可能更快)。特别是如果您使用抽象数据类型,那么提供一个允许获取最终值的抽象应该不会太难。但正如我所说,请提供更多的上下文和代码。正如另一个答案所说,有很多方法可以伪造它,我们不能在不知道确切用例的情况下推荐最好的方法。