我最近想知道这是否可能:将一个对象传递给一个函数并在该函数内部用一个完全不同的对象覆盖整个对象,以便它的值被永久修改。由于对象是通过引用传递的,我觉得它一定能以某种方式工作,但我不知道如何工作。要将其放入代码中,它应该执行如下操作:
function a() {
console.log("i am a");
}
function b() {
console.log("i am b");
}
function override(func1, func2) {
func1 = func2;
}
override(a, b);
a(); //"i am b" expected
这显然是行不通的,因为我只是覆盖了变量 func1
但我想你明白了。而且我选择使用函数而不是纯对象,因为您可以通过删除对象的属性并从第二个对象复制新属性来轻松地“覆盖”对象。但这不是我想要的。
在你问之前,我并不是想用这个解决任何现实生活中的问题,我只是出于好奇而问。那么有没有一种方法可以实现这一点,如果没有,有什么不这样做的原因吗?
谢谢!
最佳答案
这是行不通的,因为尽管 JS 传递对函数的引用,这只是意味着您的 func1
和 func2
参数最终引用了相同的函数(对象)标识符 a
和 b
引用,但是当您更改 func1
引用的内容时,不会影响 a
引用的内容到。
换句话说,当你将对象传递给函数时,函数可以通过修改、添加或删除属性来改变对象的内容,但它不能改变函数外部的变量引用哪个对象。 (至少,不是通过函数自己的参数 - 函数可以修改其范围链中的变量,直到并包括全局变量,但它必须通过引用它们自己的名称来这样做。)
关于javascript - 覆盖传递给函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999021/