有没有办法从父母的父母那里做某事?

时间:2011-07-18 22:43:43

标签: javascript

  

可能重复:
  Access parent's parent from javascript object

我有点困惑如何说这个,但我想要的是我期望从代码“this.this。”。

在数组中

Foo = 
{
    bar : 
    {
        Tool : function()
        {
            return this.this.foofoo;
        },
    },
    foofoo : "rawr"
}

从函数Foo.bar.Tool()中我如何才能访问数据foofoo?

谢谢!

3 个答案:

答案 0 :(得分:3)

我担心你不能。

this不能像您预期的那样工作 - 它指的是您代表的函数调用该函数,与无关的函数已定义。

例如:

var blah = { prop: 'blahprop' };
var cow = {
   cowfunc: function() {
       alert(this.prop);    // Notice there's no 'prop' in cow
   }
};

blah.blahfunc = cow.cowfunc;
blah.blahfunc();         // alerts 'blahprop'

如果您想要这种行为,则需要传入foofoo(或其父级)。

或者,您可以在问题中初始化Foo,然后在bar上设置对Foo的引用:

Foo.bar.Foo = Foo;

然后,假设您在Tool上呼叫bar,则可以将Tool更改为:

Tool: function() {
    return this.Foo.foofoo;   // 'this' refers to bar when called like bar.Tool()
}

答案 1 :(得分:1)

简单地引用父对象:

Foo = 
{
    bar : 
    {
        Tool : function()
        {
            return Foo.foofoo;
        },
    },
    foofoo : "rawr"
}

alert(Foo.bar.Tool()); // alerts "rawr"

答案 2 :(得分:0)

在JavaScript中,变量(和对象的属性)引用值;他们不包含他们。考虑这段代码:

var foo = { message:"hello" };
var bar1 = { o:foo };
var bar2 = { b:foo };

在上文中,bar1.obar2.a是同一个对象。您可以考虑foo的“父”,即没有关于任何值的名称或所有权的信息。

您无法使用您拥有的数据结构执行所需操作。您需要向“父”提供显式指针,或者在局部变量周围使用闭包