2012-01-08 4 views
1

複製オブジェクト内に新しいオブジェクト。私はプログラミングについて知っているJavaScriptの私にはJavaScriptの深さに冒険を取っていると私は周りに私の頭を取得することはできません小さな問題に遭遇してきた

すべては独学で、この問題は私が聞いたことがないその背後にあるいくつかの用語を持っているかもしれないので、私はそれが呼ばれることになるのか分かりません。

私は私が経験していますこの問題を説明します。

私は、2Dおよび3Dグラフィックスを表示するためのHTML5のキャンバスのためのフレームワークを書いてきました。ご想像のとおり

、私は要素のクラスを設計している、これらの要素は、私が一緒に入れベクトルクラスから構築されているキャンバス上の位置を持っています。

私がいる問題は、私は2つの「テキスト」オブジェクトを作成する場合は、その位置のオブジェクト内の関数を呼び出し、「テキスト」オブジェクトのすべての位置は、この値に変更し、次のとおりです。

var usernameLabel = new C.Text('Username:'); 
    usernameLabel.position.set(30,30) 

    var username = new C.Text('Hello World'); 
    username.position.set(0,70) 

    console.log(usernameLabel.position.x) // 0 when it should be 30 

私は逃した何かがあると確信しています、私はちょうど何かを把握することはできません。

C.Text.prototype = new C.Element(); 

    C.Element.position = new JC.Vector(); 

ご協力いただければ幸いです。から

C.Rectangle = function(width, height) 
{ 
    this.style.setSize(width,height); 
} 

C.Rectangle.prototype = new C.Element(); 
C.Rectangle.prototype.constructor = new C.Rectangle(); 



var usernameLabel = new C.Text('Username:'); 
usernameLabel.position.set(30,30) // 0,70? 

var username = new C.Text(''); 
username.position.set(0,70) // 0,70 

var rect = new C.Rectangle(20,0); 
rect.position.set(30,80) // 90,80? 

var rect2 = new C.Rectangle(20,0); 
rect2.position.set(90,80) // 90,80 

答えて

0

のプロトタイプに直接それを基づか!助けてくれてありがとう!解決策は、親オブジェクトが、私は完全には理解していない理由でコール

を行う作ることでした。

C.Text = function(string) 
{ 
    C.Object.call(this) 

    this.string = string || ''; 
    return this; 
} 

C.Text.prototype = new C.Object(); 
C.Text.prototype.constructor = C.Text; 
1

これは

C.elements = 0; 

C.Element = function() 
{ 
    this.id = C.elements ++; 

    this.position = new C.Vector(); 
    this.rotation = new C.Vector(); 
    this.style = new C.Style(); 

    this.children = []; 
} 

C.Element.prototype = { 

    constructor : C.Element, 

    addChildObject : function(o) 
    { 
     return this.children.push(o); 
    }, 

    removeChildObject : function(o) 
    { 
     this.children.splice(o,1); 
    } 

} 

テキストクラス

C.Text = function(string) 
{ 
    this.string = string || ''; 
} 

C.Text.prototype = new C.Element(); 
C.Text.prototype.constructor = C.Text(); 

私はまた、より多くのクラスが明らかにC.Elementから構築されている、例えば私の完全な要素クラスでありますそれを見て、あなたはオブジェクト上の静的な変数として位置を宣言しています。つまり、それは変化します。それは特定のオブジェクトにのみ変更するようにするには、次のいずれかが必要です

C.Element.prototype.position = new JC.Vector(); 

またはオブジェクト内の関数内

this.position = new JC.Vector(); 

これらの宣言オブジェクト、に固有の項目のためのものですC.Element.position宣言は、オブジェクトのすべてのインスタンスで同じものになります。

更新

代わりのC.Text.prototype = new C.Element()を宣言。 C.Text.prototype = C.Element.prototypeを使用してください。うまくいけばそれがあなたの問題を解決します。代わりに、それをベースにする新しいオブジェクトを作成するのではなく、それは私が答えを見つけC.Element

+0

@ user4030 jsBinまたはjsFiddleに投稿してみてください。ここで読むのは難しいでしょう。 – Ktash

+0

説明にフルクラスを追加しました。 – user4030

+0

次にテキストクラスを追加します: – user4030

関連する問題