2012-04-13 32 views
0

ブラウザ以外の環境(Titanium Studio)に次のコードがあり、result1とresult2の両方が動作し、同じ結果を返し、同じタイプ(オブジェクト)。javascript inside titanium studio: 'new' in objects

どのように異なっていて、どのように違うのか説明できますか?

私のケースでは、内部名1はローカルコンテキストへの参照がありません(これはそこにはローカル変数だけありません)。そして、私はすべてのコードを 'new'私は以下のような状況があるとき。

var name1 = function(some_arg){ 
    // some stuff 
    return result; // returns an object 
} 

var result1 = name1('some_value'); 
var result2 = new name1('some_value'); 

typeof(result1); // returns object 
typeof(result2); // returns object 

ありがとうございます!

以下の編集:オリジナルの質問に回答しました。私は今、関連するものを明確にするために探しています。下記のコメントに関連

コード:

function Name1 (name){ 
    this.name = name; 
} 
var version1 = new Name1('joey'); 
version1.name; 

var Name2 = function(name){ 
    this.name = name 
} 
var version2 = new Name2('joey'); 
version2.name; 

ありがとう! newを使用しているときnewを使用しない場合、それがグローバルオブジェクトにバインドされている間

答えて

2

thisは、新しいオブジェクトにバインドされています。コンストラクタ関数やオブジェクトに追加するメソッドにthisを使用しない場合は、実際には関係ありませんが、とにかく使用する必要があります。これを使用すると問題が発生します。

+0

素晴らしい。ありがとう!私は、コンストラクタとしての機能を使用していた場合である。 \t VAR名=関数(){} 同じ: \t関数名(){} \t?ありがとうございます。 ありがとうございます。 – svdsvd

+0

いいえ、関数を変数に代入するだけです。関数名(){}と似ています(スコープの上部に持ち上げることを除いて) - 関数をコンストラクタとして使用することは、 – ThiefMaster

+0

すみません、私はちょっと混乱しています。私は質問を言い換えるつもりです...私は上の元の質問に新しいコードを追加しました(新しいコードは大胆な編集コメントの下にあります)。したがって、上記のversion1.nameとversion2.nameの両方が 'joey'を返します。彼らは違うの?もしそうなら、どうですか?ありがとう! – svdsvd

関連する問題