2016-03-31 11 views
1

新しい関数コンストラクタが希望値

function Add(a, b){ 
 
\t this.a = a, this.b = b; 
 
\t return this.a + this.b; 
 
} 
 

 
var add5 = new Add(2, 3); \t // ? add5 = 5 
 

 
console.log(add);

を返しませんJavascriptの "typeof演算のADD5" はオブジェクトであり、 "ADD5 instanceofの追加は、" 真です。

私の質問は次のとおりです。この場合には

  1. 、どのように私は私がしたいです値5を返すことができますか?
  2. Add関数で明示的に5を返します。なぜ返されますか?Add instance?
  3. 新しいFunction()はこのインスタンスのみを返しますか?
+0

のようにそれを使うのか? –

答えて

1

あなたはこの場合上のインスタンス

function AddNumbers(a, b){ 
    this.a = a; 
    this.b = b; 
    return this; 

} 
AddNumbers.prototype.add = function(){ 
     var sum = this.a+this.b; 
     console.log(sum); 
     return sum; 
} 

var addObject = new AddNumbers(2, 3); // ? add = 5 
addObject.add(); 
+0

最初の質問には良い解決策です。ありがとうございます。 – soarinblue

2

1.関連する方法をしたい場合は、どのように

function Add(a, b){ 
      return a + b; 
} 

var add = Add(2, 3); // ? add = 5 
console.log(add); 

それとも、この...はるかに単純ではない。この私は値5を返すことができますか?

単純な関数と、new演算子を使用しない直接呼び出しがあります。機能で

function add(a, b) { 
 
    return a + b; 
 
} 
 

 
document.write(add(2, 3));

2.私は明示的に5を返す、追加、なぜ私はリターンがインスタンスを追加できますか?

3.新しい関数()はこのインスタンスのみを返しますか?

new operatorが原因でインスタンスが取得されます。

3.コンストラクタ関数によって返されるオブジェクトは、新しい式全体の結果になります。コンストラクタ関数が明示的にオブジェクトを返さない場合は、手順1で作成したオブジェクトが代わりに使用されます。 (通常はコンストラクタは値を返しませんが、彼らは通常のオブジェクトの作成プロセスを無効にしたい場合は、彼らがそうすることを選択できます。)

thisによると、新しいインスタンスがprimitive data typeを返しません。戻り値(this)はオブジェクトでのみ上書きできます。

+0

_(通常はコンストラクタは値を返しませんが、通常のオブジェクト作成プロセスをオーバーライドする場合はコンストラクタを選択することができます)_この行は疑問です。なぜOPのケースでは価値を返さなかったのですか? –

+0

これは第2、第3の質問に感謝しました。 – soarinblue

+0

@RajaprabhuAravindasamy:戻り値はオブジェクトではなかったためです。 –

0

「new」キーワードは、その機能から新しいオブジェクトを作成するため、削除する必要があります。次のように関数を呼び出すだけです。

function Add(a, b){ 
 
\t this.a = a, this.b = b; 
 
\t return this.a + this.b; 
 
} 
 

 
var add = Add(2, 3); \t // ? add = 5 
 

 
console.log(add);

+0

これは最初の質問に感謝しました、ありがとうございます。 – soarinblue

1

新しいオペレータは、オブジェクトを作成するために使用されます。あなたのケースでは、add5.aadd5.bにそれぞれ2と3が入力されます。

次の操作を行う必要があります。あなたは `new`を使用しているなぜあなたはオブジェクトを作成したいとは思われない場合

function Add(a, b){ 
    this.a = a, this.b = b; 
    this.result = function(){ 
     return this.a + this.b; 
    } 
} 

var add5 = new Add(2, 3); // ? add5 = 5 

console.log(add5.result()); 
+0

第1の質問のための巧妙なトリック、ありがとう。 – soarinblue

関連する問題