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
関数に渡った後は、これが次の関数から来ていることを知る方法はありません。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)
役に立った?