3
var object = {foo: 'bar'};

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

getSource(object.foo) === object
4

2 回答 2

6

不,在 JavaScript 中没有类似的反向引用。传递给函数的是值 -- 5"foo"、对象引用等。没有关于该值的信息可以告诉您该值来自对象属性,更不用说哪个对象的属性了。

于 2012-06-18T07:22:51.497 回答
2

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

var object = {foo: 'bar'};
function by_value(v) {
    v = v + v
}
document.write(by_value(object.foo)) // Writes 'bar'

换句话说,一旦你传递object.foo给任何函数,就无法知道 this 来自object

但是,如果您传递一个对象,该变量的将是对该对象的引用:(注意:这不是真正的“按引用传递”,请参阅@tj-crowder 的评论):

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)

有帮助吗?

于 2012-06-18T07:28:36.850 回答