让我说我有这样的代码:
var obj1 = {test: false};
function testCondition(condition){
if (!condition){
testCondition(condition);
}
}
testCondition(obj1.test);
上面的代码会将false
作为参数传递给testCondition
。如何传递对obj1.test的引用而不是传递它的值?
修改 哇,谢谢快速回复!! :)但我想补充一点,我无法传递整个对象,因为我想构建一个通用函数/方法,只需检查参数并执行onComplete回调或onError回调。上面的代码只是我现在的情况的一个例子。
答案 0 :(得分:4)
我可以从中看到两个选择:
传递对象本身,而不是其成员。然后,您可以访问和修改该成员:
function testCondition(object) {
if (!object.test) {
testCondition(object);
}
}
testCondition(obj1)
或者,由于您正在更改单个值,因此您可以通过该函数返回该值:
function testCondition(condition) {
if (!condition){
return testCondition(condition);
}
}
obj1.test = testCondition(obj1.test);
仅供参考,如果条件为假,您现在显示的代码将导致无限递归。
答案 1 :(得分:1)
返回值有什么问题?
或者,您可以将参数包装在对象中:
function foo(arg) {
var val = arg.val;
// do something with val
arg.val = val;
}
var arg = {val:"bar"};
foo(arg);
// do something with arg.val
答案 2 :(得分:0)
你不能。
改为通过obj1
,然后检查函数内的condition.test
。
答案 3 :(得分:0)
你做不到。 JavaScript通过引用,基元(整数,字符串,布尔值)按值传递对象和数组。除了糟糕的解决方法之外,你所要求的是不可能的:
function ugly(result) {
result.success = true;
}
var result = {};
ugly(result);
相反,只需返回您的价值。这就是JavaScript的工作方式。
答案 4 :(得分:0)
传递整个对象而不是其属性:
testCondition(obj1);
然后
if(!passedObj.test){
等...