2017-12-17 17 views
1

私はプロトタイプの継承の周りに私の頭を包み込みたいです。 私はMDNのドキュメントを読んだことがありますが、それはもっと賢く残っていませんでした。私はこれまでのところ次のコードを持っています...Javascript継承嫌い

var Vertex = function(id, options){ 
    this.options = options || {}; 
    this.id = id; 

    this.position = new THREE.Vector3(0, 0, 0); 
    this.velocity = new THREE.Vector3(0, 0, 0); 
    this.acceleration = new THREE.Vector3(0, 0, 0); 

    this.toString = function(){ 
    return this.id.toString(); 
    }; 

    this.edge_count = 0; 
    this.edges = {}; 

    if(!this.options.hasOwnProperty('label')){ 
    this.options.label = { 
     text: '', 
     direction: 'x', 
     distance: '10' 
    }; 
    }; 
}; 

...コンストラクタによって追加されたすべてのプロパティを "継承"したいと思います。頂点には、メッシュを頂点のobjectとして追加するペイントメソッドがあります。だから私は、私は単純に頂点のオブジェクトのプロパティにカメラを割り当て、コンストラクタ、希望を除いて(頂点の交換の低下としてCameraVertexを使用することができるだろう... ...

var CameraVertex = function(id, camera){ 
    Vertex.call(this); 
    this.object = camera; 
    this.id = id; 
}; 
CameraVertex.prototype = Object.create(Vertex.prototype); 
CameraVertex.prototype.constructor = CameraVertex; 

を書きました通常は。メッシュまたはグループを保持

しかし、いくつかの理由で、私はCameraVertexと通常の頂点間のエッジを作成するときに何source.objectはなさそうです。

完全な例は、クリックした後Social Cartographyで見つけることができますgoogleにサインインし、マウスで頂点を選択してください。

+0

'CameraVertex'は、' Vertex'コンストラクタによって定義されたすべてのプロパティを "継承"することになっているので、この行は意図的に存在します。結局のところ、私は結果として得られるCameraVertexを 'object'プロパティと' position'と 'velocity'と' acceleration'だけでなく、他の頂点とまったく同じように扱うことができるようにしたいと考えています。 –

+0

プロトタイプ継承_by definition_は、コンストラクタで追加されたプロパティを継承するために使用することはできません。これらのプロパティは_instanceプロパティ_であり、プロトタイプの一部ではないためです。 – Alnitak

+0

BaseClass.call(this)を呼び出すことによって、私はその効果を達成します。 –

答えて

1

継承されたオブジェクトのコンストラクタを呼び出すときには、必要なすべてのパラメータも渡す必要があります。

var CameraVertex = function(id, camera, options){ 
    Vertex.call(this, id, options); 
    this.object = camera; 
    this.id = id; 
}; 

私は3つのことに慣れていないが、私はsource.objectの問題を理解していないが、今のところこの問題を見ることができる。

+1

'Vertex'にはデフォルトのパラメータが用意されていますので、問題はないはずです。この関数は 'Vertex(id、options)'を '= undefined 'というオプションで呼び出し、2番目の行が入ります。しかし正しいです。それは3つではありません.js特定の問題、JavaScriptの問題のmoreo。 –

+0

@JoshuaMoore投稿したVertexオブジェクトから、オプションはオプションですが、IDはありません。 – Burimi

+0

@JoshuaMooreこれは長い話ですが、一度この本を読んだ後は、JSの継承で私の頭を包み込みました。https://github.com/getify/You-Dont-Know-JS/blob/master/this% 20&%20object%20prototypes/README.md#あなたの知らないjs-this - オブジェクトプロトタイプ – Burimi