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

JavaScriptには、渡される関数の内部からobject.fooのプロパティであるかどうかを判断する方法がありますか?言い換えれば、これを行うことができる関数を書くことは可能ですか?objectobject.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関数に渡った後は、これが次の関数から来ていることを知る方法はありません。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 に答える