2014-12-24 98 views
0

所以我覺得我要瘋了。我試圖在我的代碼中使用原型,所以我將有一個圖層對象,它將有一個圖形對象,它具有_newFigure函數。JavaScript:如何訪問另一個對象內的對象的原型?

Layer = function(){} 
Layer.prototype.figure = function(){} 
Layer.prototype.figure.prototype._newFigure = function(){ 
    //(Creates new Figure) 
} 

我在僞代碼期待什麼:

[LayerObject]{ 
    figure:{ 
     _newFigure:function(){ 
      //(Creates new Figure) 
     }  
    } 
} 

現在,,將是合乎邏輯的事情,但由於某種原因它好好嘗試的工作。 你現在我該怎麼做到這一點?請記住,我出於性能原因使用原​​型。

- 在此先感謝 -

UPDATE ------------------------------- -------------------------------------------------- ------

由於尼克「爲什麼層需要有它的原型圖?好像層和圖我們的獨立的實體,並且層可以具有圖實例連接到它只是一個想法:)「

所以,我已經更新的代碼(現在的工作)

Layer = function(){ 
    this.figure = new figureHandler(this); 
} 

function figureHandler(layer){ 
    this.layer = layer; 
} 

figureHandler.prototype._newFigure = function(){ 
    //(Creates new Figure) 
} 

- 再見!感謝您的幫助:) -

+0

爲什麼層需要有它的原型圖?它看起來像圖層和圖我們分開的實體,並且一個圖層可以附加一個圖實例。只是一個想法:) –

+0

你不想這樣做。 –

回答

1

會像你下面的工作:

Layer = function Layer(){ 
    this.figures = []; 
}; 
Layer.prototype.addFigure = function addFigure(arg){ 
    arg = arg || {}; 
    arg.layer = this; 
    this.figures.push(new Figure(arg)); 
    return this;//now you can stack functions 
} 
Figure = function Figure(arg){ 
    arg = arg || {}; 
    //layer is not optional 
    this.layer = arg.layer 
    || (function(){ 
     throw new Error('Cannot create figure without layer'); 
    }()); 
    this.shape = arg.shape || 'square'; 
} 
var l = new Layer(); 
l.addFigure({shape:'round'})//stacking next addFigure on next line 
    .addFigure();//defaults to square 
console.log(l.figures); 

更多關於構造函數和原型這裏的信息?

Figure = function() {}; 
Layer = function() {}; 
Layer.prototype.figure = function() { 
    return new Figure(); 
}; 

這是一個有點混亂給我你爲什麼會想像layer.figure._newFigure接口時layer.figure可以爲你創建一個新的圖形對象。也許你的用例對我來說還不夠清楚。

編輯:根據我原來的迴應評論,我假定你的意思是這樣的:

Figure = function(layer) { 
    this.layer = layer; 
}; 
Layer = function() {}; 
Layer.prototype.figure = function() { 
    return new Figure(this); 
}; 
+0

圖需要一個Layer,所以你可以將'this'傳遞給圖構造函數,所以圖可以設置它的圖層。你可以將參數包裝在一個對象中,所以如果需要繼承或者作爲長功能鏈的一部分被調用,你可以傳遞arg對象而不改變函數簽名。 – HMR

相關問題