2011-12-02 36 views
2

我有一个对象myObject的,我想在myObject.b.c.c3功能接入父母成员,如何访问静态对象的父成员?

下面是我的例子:

var myObject = { 
    a: { 
     a1: 1, 
     a2: 2 
    }, 
    b: { 
     b1: 3, 
     b2: 4, 
     c: { 
      c1: 5, 
      c2: 6, 
      c3: function() { 
       //how can here access a.a1, a.a2, b.b1 and b.b2,?? 
       //not use myObject.a.a1, myObject.a.a2, myObject.b.b1....etc 
       //can like to use this.parent.parent.a.a1?? 
      } 
     } 
    } 
} 

什么想法?

+0

http://stackoverflow.com/questions/183702/access-parents-parent-from-javascript-object –

回答

1

为什么不改变你如何构建你的对象?

function getObject() { 
    var result = { 
     a: { 
      a1: 1, 
      a2: 2 
     }, 
     b: { 
      b1: 3, 
      b2: 4, 
      c: { 
       c1: 5, 
       c2: 6 
      } 
     } 
    }; 

    result.b.c.c3 = (function(parent) { 
     var myA1 = parent.a.a1; 
     var myA2 = parent.a.a2; 
     var myB1 = parent.b.b1; 
     var myB2 = parent.b.b2; 
     //and so on 
    })(result); 

    return result; 
} 

然后var myObject = getObject();

c3创造了一个闭合到正被构造的物体。它可以完全访问a.a1,a.a2等。

+0

我需要一个快速简单的方法,你接近这个原则已经失去了,但是谢谢。 – Jasper

+1

@joe - 这*是快速简单的方法:-) –

0

函数内部必须调用其他对象属性作为静态标识符,并且不能以相对方式引用它们。但是,如果您创建方法来遍历对象字面值的属性,并将这些方法作为Object原型的属性进行绑定,则可能会发生更改。

0

在这些情况下,通常的策略是使用闭包和模块模式,并使用作用域链作为关系。

一个对象不知道,也没有找到创建它的结构的方法。有许多方法可以创建一个对象结构,并且一个对象可以属于许多结构,所以“父”的概念是不可靠的。

使用不是因为功能的解决这个被调用设置,你无法通过函数如何被创建(除了ES5 绑定)进行设置。

0
var myObject = { 
    a: { 
     a1: 1, 
     a2: 2 
    }, 
    b: { 
     b1: 3, 
     b2: 4, 
     c: { 
      c1: 5, 
      c2: 6, 
      c3: function() { 
       alert("this.parent.parent.a.a1 is " + this.parent.parent.a.a1); 
      } 
     } 
    }, 
    init: function(obj, flag) { 
     if (!obj) obj = this; 
     for (var prop in obj) { 
      if (typeof obj[prop] == "object" && prop != "parent") { 
       obj[prop].parent = obj; 
       arguments.callee(obj[prop], true); 
      } 
     } 
     if (!flag) { 
      delete this.init; 
      return this; 
     } 
    } 
}.init(); 

然后你必须调用myObject.b.c.c3();
完成。