2017-05-09 3 views
1

オブジェクトは、私はそのようなエッジのオブジェクトを持っている必要があります。Javascriptのコンストラクタと

var a=new Array(); 

a[0]=0+move; a[1]=200; 
a[2]=0+move; a[3]=130; 
var ed=new edge(a,"a"); 
+0

あなたは 'edge'という名前の2つの異なるものを持ってしようとしています。コンストラクタが必要な場合は、オブジェクトを削除します。 'function edge ...' ** not ** 'var edge = {...' –

+0

'object'と' function'に同じ名前を使うべきではありません。名前を変更しようとするとうまくいきます。 – optimistanoop

+0

...同じ名前のオブジェクトが同じ名前付き関数に勝つのは、関数の宣言がファイルの先頭にぶら下がるからです。 – nem035

答えて

2

同じスコープ内に、edgeという名前の識別子を1つだけ持つことができます。それが起こると、前のものを上書きするために割り当てられた最後のものが発生します。ホイストのために、関数の宣言が最初に処理されています(コード内で2番目に表示されていますが)がオブジェクトを上書きしています。したがって、コンストラクタとしてedgeを使用しようとする行に到達すると、そのオブジェクトはすでにオブジェクトによって上書きされています。ホイストについての詳細はhereを参照してください。

function edge(coordinates, name){ 
 
    this.coordinates = coordinates; 
 
    this.name = name; 
 
} 
 

 
var move = 100; // dummy variable just to make your code work 
 

 
// Array literal notation. Simpler than making new array and populating 
 
// indexes separately 
 
var a = [0 + move, 200, 0 + move, 130 ]; 
 

 
// Use function as constructor 
 
var e1 = new edge(a, "a"); 
 

 
console.log(e1);

関連する問題