2011-12-02 35 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();
完成。