相当于JavaScript中的引用赋值


JavaScript equivalent of assign by reference?

是否有任何方法可以通过指向一个对象属性的局部变量在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中,

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

  • 对象是引用
  • 原语(数字,字符串等)通过传递。

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

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

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

这样做是因为裸对象变量实际上是对该变量的引用,因此您的新(更短的)变量可以指向相同的位置。

然而,原始数字和字符串值是通过值传递给的,所以你不能为它们创建新的引用。

这样读起来容易多了,输入起来也容易多了:

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

你试过上面的方法吗?因为它有效。

对于实际问题。不能有指向值的引用或指针。在javascript中,一切都是通过值传递的(不是引用)。

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

coffeeScript code

# result method
Object::r = (v) ->
    s=@
    st='global.'+v+'={'+'s'+'}'
    re=(eval st)
    str='global.'+v+'=re["s"]'
    eval(str)
    @

[1..10].r('a').
    map( (v) -> 'lorem_ipsum_'+v.toString() ).r('ar').
    join("__").r('s').
    split("__").reverse().r('arr')
console.log("'n")
console.log(a); console.log("'n")
console.log(ar); console.log("'n")
console.log(s); console.log("'n")
console.log(arr); console.log("'n")
截图