var object = {foo: 'bar'};
JavaScript 是否有办法确定这object.foo
是object
从传递给的函数内部的属性object.foo
?换句话说,是否有可能编写一个可以做到这一点的函数:
getSource(object.foo) === object
var object = {foo: 'bar'};
JavaScript 是否有办法确定这object.foo
是object
从传递给的函数内部的属性object.foo
?换句话说,是否有可能编写一个可以做到这一点的函数:
getSource(object.foo) === object
不,在 JavaScript 中没有类似的反向引用。传递给函数的是值 -- 5
、"foo"
、对象引用等。没有关于该值的信息可以告诉您该值来自对象属性,更不用说哪个对象的属性了。
对于变量,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)
有帮助吗?