JavaScript:如何访问另一个对象内的对象原型?

时间:2014-12-24 05:29:26

标签: javascript object prototype

所以我想我在这里疯了。我试图在我的代码中使用原型,所以我将有一个Layer对象,它将具有一个具有_newFigure函数的Figure对象。

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

我在伪代码中的期望:

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

现在,对我来说,这将是合乎逻辑的事情,但由于某种原因,它确实起作用。 你现在我怎么能做到这一点?请记住,出于性能原因,我使用原型。

- 提前致谢 -

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

正如尼克所说"为什么Layer需要在其原型上有一个数字?看起来Layer和Figure是我们独立的实体,而Layer可以附加一个Figure实例。只是一个想法:)"

所以,我已经更新了代码(现在正在工作)

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

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

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

- 看到你!谢谢你的帮助:) -

2 个答案:

答案 0 :(得分:1)

以下内容适用于您?

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);
};

答案 1 :(得分:0)

我想你可能正在寻找这样的东西:

图有一个Layer实例,一个Layer实例有多个数字。图层可能有一个工厂,可以创建具有当前图层实例的图形:

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);

有关构造函数和原型的更多信息:https://stackoverflow.com/a/16063711/1641941