Javascript 如何从对属性的引用确定父对象

Javascript 如何从对属性的引用确定父对象,javascript,object,properties,Javascript,Object,Properties,JavaScript是否有办法从传递object.foo的函数内部确定object.foo是object的属性?换句话说,是否可以编写一个func来实现这一点: var object = {foo: 'bar'}; 不,JavaScript中没有这样的反向引用。传递到函数中的是一个值--5,“foo”,一个对象引用,等等。没有关于该值的信息告诉您该值来自对象属性,更不用说哪个对象的属性了。对于变量,Javascript使用“按值传递”,换句话说,当object.foo传递给任何函数时,该函数将

JavaScript是否有办法从传递
object.foo
的函数内部确定
object.foo
object
的属性?换句话说,是否可以编写一个func来实现这一点:

var object = {foo: 'bar'};

不,JavaScript中没有这样的反向引用。传递到函数中的是一个值--
5
“foo”
,一个对象引用,等等。没有关于该值的信息告诉您该值来自对象属性,更不用说哪个对象的属性了。

对于变量,Javascript使用“按值传递”,换句话说,当
object.foo
传递给任何函数时,该函数将收到的是
'bar'
,而不是对
object.foo的引用:

getSource(object.foo) === object
换句话说,一旦将
object.foo
传递给任何函数,就无法知道它来自
object

但是,如果传递对象,该变量的值将是对该对象的引用:(注意:这不是真的“通过引用传递”,请参见@t-j-crowder的注释):

这意味着,作为一种廉价的变通方法,您还可以在对象中存储对对象的“引用”:

function as_reference(o) {
    o.foo = o.foo + o.foo
}
document.write(by_reference(object)) // Writes 'barbar'

有帮助吗?

你为什么不解释一下你想要达到的目标,也许你是在一个过于复杂的环境中实现的manner@mplungjan我想实现很多事情。@mplungjan我可以将
对象本身传递给一个函数,我想知道不这样做是否有可能获得这些信息。“但是,对于脚本使用的对象”通过引用调用“:“否。这是不正确的。JavaScript总是按值传递。传递的值可能是对象引用,但仍然是通过值传递的。重要的是不要让这个误导性的神话永久化。考虑:
函数foo(o){o=null;}
var obj={}
foo(obj)obj的值是多少?如果JavaScript对对象使用pass-by-reference,
obj
将是
null
。事实并非如此。“引用传递”中的“引用”一词指的是对传递的变量的引用;这与对象引用无关。抱歉,在保存编辑之前回复了您的评论-诅咒您,选项卡式浏览。编辑现在应该是实时的。@Manuel:因为
var
是一个关键字,所以不能使用虚线符号(例如
v.var
)将其用作属性名。我为您将其更改为
val
。还强烈建议不要依赖自动插入分号的恐怖行为。谢谢,是的,我很确定这是不可能的,尽管你必须承认,如果有一种机制可以做到这一点,那会很酷。@ryanve::-)这会使基础引擎显着复杂化。
function as_reference(o) {
    o.foo = o.foo + o.foo
}
document.write(by_reference(object)) // Writes 'barbar'
var object = {foo: 'bar'};
object.foo = {val: object.foo, parent: object}
function do_something(v) {
    console.log(v.val);   // foo
    console.log(v.parent) // object
}
do_something(object.foo)