通过将局部变量指向对象属性,有没有办法让我在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中推进“高级新手”。
答案 0 :(得分:18)
在Javascript中,所有内容都按值传递,但变量的类型将决定它是否是按值传递的引用;
简单来说,如果将变量传递给一个数组的函数,在函数中修改它将影响父类。
但是,在数组中传递值不会。当然,绝对没有什么能阻止你在一个对象中包装一个原语,以确保它像一个“指针”一样工作。
答案 1 :(得分:3)
您可以指定一个新变量来引用属性键链中的任何深度,只要引用的条目不是基本类型。
这是有效的,因为裸对象变量实际上是该变量的引用,因此您的新(较短)变量可以指向同一个地方。
然而,原始数字和字符串值按值传递,因此您无法创建对这些值的新引用。
答案 2 :(得分:2)
阅读起来会容易得多,输入也容易多了:
var subObj = is.much.easier.to.type.once;
if (subObj.length) {
subObj[newSubObjectKey] = anObject;
}
你有没有试过以上?因为它有效。
至于实际问题。您不能拥有值的引用或指针。一切都是通过javascript中的值传递的(不是参考)。
编辑:我忘了提一些值是引用。您仍然无法获得指向这些参考值的指针。
答案 3 :(得分:0)