Javascript只通过引用传递对象一跳,但不是两个?

时间:2015-07-17 12:45:37

标签: javascript pass-by-reference

Javascript通过引用将对象传递给我的函数,但似乎接收fn无法将其传递给第二个函数。

我的主HTML文档上有一个按钮,如下所示:

<form>
    <input type="button" value="Epoch"
    onclick='epoch(cl2Status, opts2)' />
</form>

它将两个对象传递给函数“epoch”,如下所示:

function epoch (clStatus, opts) {
   startClockAt (clStatus.cid, opts, 2, 23, 11, 20);
   stopClock (clStatus.cid);
   clStatus.clockStopped = true;
}

传递给“epoch”的两个对象只是简单数据项的集合。为了说明它们的结构,这里是一个如何创建(另一个非常相似):

cl2Status = {
     clid:          2,
     cid:           'clockCanvas2',
     testing:       false,
     nightTime:     false,
     clockStopped:  false,
     faceHidden:    false
};

函数“epoch”将这两个对象传递给第二个使用对象数据项的函数,并且必须在再次传递对象之前更改其中一个项的值。

通过在各个地方插入警告语句,我可以看到虽然“epoch”可以读取数据,但我的第二个功能却不能。我已经读过,虽然普通的标量变量只能通过值传递,但javascript通过引用传递对象。 (至少在所有实际目的中,即使该描述不太准确。)如果它们可以传递给一个函数,为什么不能将它们传递给另一个函数呢?

有没有办法这样做,以便对象可以在几个跃点周围传递?

2 个答案:

答案 0 :(得分:1)

在你的函数中,你没有将整个对象传递给第二个函数,你只传递了对象的'cid'属性。尝试将整个'clStatus'对象传递给第二个函数。

答案 1 :(得分:0)

从函数调用中删除.cid属性:

 function epoch (clStatus, opts) {
   startClockAt (clStatus, opts, 2, 23, 11, 20); //just pass in the object clStatus
   stopClock (clStatus);
   clStatus.clockStopped = true;
}