2013-12-10 217 views
1

我重構了一些JS代碼,並需要訪問對象,如訪問嵌套對象

Object1.Object2.IsValid(); 

這就是我現在所擁有的父母的財產。

function _Object1(object) { 

    this._object1 = object; 

    this.Object2= new _Object2(); 

    function IsValid() { 
     // tests here 
    } 
} 

function _Object2() 
{ 
    function IsValid() { 
     // tests here but needs to use Object1 property above. 
    } 
} 

唯一的問題是,我不知道如何訪問Object1在對象2不傳遞任何參數。在Object1中嵌套Object2,也許?

編輯:我特林實現JS OOP,就像重新發明輪子,而是想嘗試它現在:)

我會解釋這個問題在OOP方面:

我有一個類_Object1,它有一個方法IsValid()_Object1也有一個屬性Object2這是類型_Object2

現在,_Object2也有方法名爲IsValid()。但這裏有一個問題,_Object2.IsValid需要_Object1的值進行測試。

對於如果我做上面的代碼:

var Object1 = new _Object1(); 

我可以簡單地調用Object1.Object2.IsValid()的結果。不是嗎?

聲明:我一直在使用JS一段時間,但從來沒有涉足這些東西。

+1

我不知道有足夠的信息來回答你的問題。你究竟想要做什麼? 「嘗試訪問Object2中的Object1」並不夠具體。你能告訴我們你試過了什麼嗎? – linstantnoodles

+0

這就是我所擁有的,用我能想出的其他東西來更新問題。 – Abhinav

+0

可以使用封閉+組合,或通過實例,經銷商的選擇。 – dandavis

回答

3

_Object2它需要什麼:

function _Object1(object) { 

    this._object1 = object; 

    this.Object2= new _Object2(this); 

    function IsValid() { 
     // tests here 
    } 
} 

function _Object2(parentObject) 
{ 
    function IsValid() { 
     // parentObject refers to the _Object1 that created this object 
    } 
} 
+0

謝謝,我不想將任何參數傳遞給Object2,但它似乎會爲我節省一些頭痛。 – Abhinav

1

我認爲你在尋找什麼是不可能的,除非你願意傳遞到對象中的數據。

僅僅因爲你的_Object2實例已在_Object1構造函數中創建的,它不會自動有你_Object1實例的數據的任何引用。你將不得不告訴_Object2例如大約要麼在構造函數或通過其他方法_Object1值:

function _Object2(parentObject) { /* ... */ } 
// or 
_Object2.prototype.setParent = function(parent) { /* ... */} 
// or 
myObject2.parent = this._object1; 
+0

我完全同意,我不確定所有信息都可以帶着這個。所以這只是通常的編程:)。謝謝。 – Abhinav