Javascript相当于通过引用分配?

时间:2011-07-18 12:02:39

标签: php javascript pointers

通过将局部变量指向对象属性,有没有办法让我在Javascript中更简洁?

例如在PHP中,我可以这样做:

$obj->subobject->property = 'Foo';
$property =& $obj->subobject->property;
$property =  'Bar';
echo $obj->subobject->property;
// output 'Bar'

这不是一个很好的例子,但你明白了。

我想在Javascript中复制此行为。我经常不得不深入到物体中,这让我很烦恼:

if (please.stop.making.me[somevar].type.so.much.length) {
    please.stop.making.me[somevar].type.so.much[newSubObjectKey] = anObject;
}

// perform more operations on the object down here

阅读起来会容易得多,输入也容易多了:

var subObj = is.much.easier.to.type.once;
if (subObj.length) {
     subObj[newSubObjectKey] = anObject;
}

// now that's much better

我知道我应该知道这一点,但我只是在Javascript中推进“高级新手”。

4 个答案:

答案 0 :(得分:18)

在Javascript中,所有内容都按值传递,但变量的类型将决定它是否是按值传递的引用;

  • 对象是参考
  • 原语(数字,字符串等)按值传递。

简单来说,如果将变量传递给一个数组的函数,在函数中修改它将影响父类。

但是,在数组中传递值不会。当然,绝对没有什么能阻止你在一个对象中包装一个原语,以确保它像一个“指针”一样工作。

答案 1 :(得分:3)

您可以指定一个新变量来引用属性键链中的任何深度,只要引用的条目不是基本类型

这是有效的,因为裸对象变量实际上是该变量的引用,因此您的新(较短)变量可以指向同一个地方。

然而,原始数字和字符串值按值传递,因此您无法创建对这些值的新引用。

答案 2 :(得分:2)

  

阅读起来会容易得多,输入也容易多了:

var subObj = is.much.easier.to.type.once;
if (subObj.length) {
     subObj[newSubObjectKey] = anObject;
}

你有没有试过以上?因为它有效。

至于实际问题。您不能拥有值的引用或指针。一切都是通过javascript中的值传递的(不是参考)。

编辑:我忘了提一些值是引用。您仍然无法获得指向这些参考值的指针。

答案 3 :(得分:0)

coffeeScript代码

org.apache.commons.codec.binary.Base64.decodeBase64(row["dcpimage"]).

screenShot