我确定我在这里遗漏了一些明显的东西,但我希望changeMe方法的参数能够“通过引用”传递 - 换句话说,对函数内部参数的更改将改变变量在功能之外。
以下内容在jsfiddle中运行,使用Chrome的F12开发人员工具显示控制台输出。 http://jsfiddle.net/fzEpa/
var object1 = { Property1: 'Value1' };
changeMe(object1);
console.log(object1);
function changeMe(refToObject) {
console.log(refToObject);
refToObject = { Property1: 'Value2' };
console.log(refToObject);
}
答案 0 :(得分:11)
它是通过引用传递的,但它是对象的引用,而不是object1
变量(它也是对象的引用)。
您正在通过引用新对象来覆盖对象的引用。
这使原始对象的原始引用保持不变。
要修改对象,您可以执行以下操作:
function changeMe(refToObject) {
refToObject.Property1 = 'Value2';
}
答案 1 :(得分:3)
对象的引用作为参数值传递。但是:
refToObject = { Property1: 'Value2' };
此时您将丢失对refToObject
以前引用的对象的引用,因为您要将此变量指定为引用其他对象。
现在,如果您要编辑refToObject
的属性而不是丢弃以前的对象引用,那么您的代码将按预期工作(首先在@ Quentin的答案中解释)。
答案 2 :(得分:0)
如果你熟悉C ++,这就等于做这样的事情:
void f(int* ref) {
ref = new int(3);
}
int* a = new int(5);
f(a);
printf("%d",a); //Prints 5
答案 3 :(得分:0)
您正在尝试重新定义属性1,因此它无法正常工作。为了使用引用传递,ypu必须在 ChangeMe()函数中以refToObject.Property1='Value2'
的方式执行此操作。请参阅此内容以便更好地理解Pass Variables by Reference in Javascript