2

假设我有这种代码:

var obj1 = {test: false};

function testCondition(condition){
  if (!condition){
    testCondition(condition);
  }
}

testCondition(obj1.test);

上面的代码将false作为参数传递给testCondition. 如何传递对 obj1.test 的引用而不是传递它的值?

编辑 哇,感谢您的快速回复!:) 但我想补充一点,我不能传递整个对象,因为我想构建一个通用函数/方法,它只检查参数并执行 onComplete 回调或 onError 回调。上面的代码只是我现在所处的情况的例子。

4

5 回答 5

4

据我所知,您有两个选择:

  1. 传递对象本身,而不是其成员。然后,您可以访问和修改成员:

    function testCondition(object) {
        if (!object.test) {
            testCondition(object);
        }
    }
    testCondition(obj1)
    
  2. 或者,由于您正在更改单个值,您可以让函数返回该值:

    function testCondition(condition) {
        if (!condition){
            return testCondition(condition);
        }
    }
    obj1.test = testCondition(obj1.test);
    

仅供参考,如果条件为假,您现在显示的代码将导致无限递归。

于 2013-07-17T13:38:49.693 回答
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
于 2013-07-17T13:36:42.153 回答
0

你不能。JavaScript 通过引用传递对象和数组,通过值传递基元(整数、字符串、布尔值)。你所要求的是不可能的,除非有不好的解决方法:

function ugly(result) {
  result.success = true;
}

var result = {};

ugly(result);

相反,只需返回您的值。这就是 JavaScript 的工作方式。

于 2013-07-17T13:37:25.763 回答
0

传递整个对象而不是其属性:

testCondition(obj1);

接着

if(!passedObj.test){

ETC...

于 2013-07-17T13:38:06.120 回答
0

你不能。

obj1而是通过,然后检查condition.test函数内部。

于 2013-07-17T13:36:51.927 回答