2012-02-28 4 views
3

各スクリプトの背景には何が起こっているのですか?このコードの背景には何が起こっていますか?

コード1:2

function getSize() 
{ 
    return {width: 0; height: 0}; 
} 

は、私は彼らがすべての感覚ではなく、ただ、両方同等だと思う

function Size (width, height) 
{ 
    this.width = width; 
    this.height = height; 
} 

function getSize() 
{ 
    return new Size (0, 0); 
} 

コード私はgetsize()たくさんになると仮定すると、コードの間に違いがありますチェックしたかった

+0

最初は 'Size'オブジェクトを返します.2番目のオブジェクトは '標準' JSオブジェクトを返します???質問は何ですか? – PeeHaa

答えて

2

最初のコード例では、サイズという名前のオブジェクトを返しています.2番目のコードでは、匿名のjavascriptオブジェクトを返しています。したがって、Sizeオブジェクトのコンストラクタとプロトタイプが失われ、同様のオブジェクトをさらに拡張することができなくなります。

1

これらは(本質的に)同等ですですが、Sizeのプロトタイプが変更されるまでです。それが将来的に任意の時点で変更された場合、あなたの{width: 0, height: 0}が不正確になりますので、唯一の本当の違いはSizeオブジェクトは、一般的なJSオブジェクトに異なるオブジェクトのインスタンスであるということであるreturn new Size(0, 0);

を使用することがおそらく良いでしょう:

var a = new Size(0,0); 
var b = {width:0, height:0}; 
alert(a == b) // would be false even if JS didn't always say two objects are different (see comments) 
+0

'=='の注釈は、その意味で「等しい」オブジェクトが決して等しくないので、ちょっと混乱します。 '{}!== {}'。 – pimvdb

+0

良いお電話 - 言い訳を更新しました:P – Joe

関連する問題