【问题标题】:Is there a way to do run something from a parent of a parent? [duplicate]有没有办法从父母的父母那里运行一些东西? [复制]
【发布时间】:2011-07-18 22:43:42
【问题描述】:

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

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

在数组中

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

从函数 Foo.bar.Tool() 我怎样才能让它访问数据 foofoo ?

谢谢!

【问题讨论】:

标签: javascript


【解决方案1】:

恐怕你不能。

this 不像你想象的那样工作——它指的是你代表调用函数的对象,与函数的定义where无关.

例如:

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;

然后,假设您在bar 上调用Tool,您可以将Tool 更改为:

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

【讨论】:

    【解决方案2】:

    直接引用父对象:

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

    【讨论】:

      【解决方案3】:

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

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

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

      你不能用你拥有的数据结构做你想做的事。您需要提供指向“父”的显式指针,或者在局部变量周围使用 闭包

      【讨论】:

        猜你喜欢
        • 2023-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        相关资源
        最近更新 更多