私はプロトタイプの継承の周りに私の頭を包み込みたいです。 私は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にサインインし、マウスで頂点を選択してください。
'CameraVertex'は、' Vertex'コンストラクタによって定義されたすべてのプロパティを "継承"することになっているので、この行は意図的に存在します。結局のところ、私は結果として得られるCameraVertexを 'object'プロパティと' position'と 'velocity'と' acceleration'だけでなく、他の頂点とまったく同じように扱うことができるようにしたいと考えています。 –
プロトタイプ継承_by definition_は、コンストラクタで追加されたプロパティを継承するために使用することはできません。これらのプロパティは_instanceプロパティ_であり、プロトタイプの一部ではないためです。 – Alnitak
BaseClass.call(this)を呼び出すことによって、私はその効果を達成します。 –