2017-09-22 12 views
0

これはどのように可能ですか?私は、最初の2つの例では未定義に戻すべきだと考えました。これはどのように可能ですか?オブジェクト変数へのアクセス

function SecretCode() { 
    var _secretNum = 78; 

    this.guessNum = function(num) { 
     if(num > _secretNum) { 
      return console.log("Lower"); 
     } else if (num < _secretNum) { 
      return console.log("Higher"); 
     } else { 
      return console.log("You guessed it"); 
     } 
    } 
} 

let secret = new SecretCode(); 
secret.guessNum(this.secretNum); //You guessed it 
secret.guessNum(this._secretNum); //You guessed it 
secret.guessNum(secretNum);   //is not defined 
secret.guessNum(_secretNum);  //is not defined 
console.log(secret.secretNum);  //undefined 
console.log(secret._secretNum);  //undefined 
+0

有用であろう各line.Hopeに対してコメントを追加して、NOT' secret' –

+0

'secret.guessNum(this.secretNum)'の 'this'は' window'を参照し、windowは 'secretNum'を持たないため、未定義で最初の2つの条件は満たされず、else文が実行されます。 – Ammar

答えて

3

はい、関数呼び出しの引数として、this.secretNumthis._secretNumは両方とも未定義です。しかし、num > undefinednum < undefinedの両方がfalseを返します。したがって、if構造には、第3ブランチを取得する以外の可能性はありません。

+0

これは、 'undefined'と比較しようとすると何が起きるかを調べることで分かりました。 – Carcigenicate

+0

もちろん、コンソールはあなたの友人です:) –

+0

オハイオ州の男私はちょうど私の質問がどのように愚かだったか分かりました。この質問にお答えいただいた皆様に感謝します! – filemono

0

最初の2つの例は、「あなたはそれを推測し、」書き出すthis.secretNumundefinedに解決し、そうnum引数はundefinedに解決しそうもない(num > _secretNum)(num < _secretNum) trueであるため。もちろん、this._secretNumについても同様です。

+0

私はこれまでに気付かなかった。ありがとう! – filemono

0

私は、これはあなたがそう `this`がwindow``を指し、window` `のコンテキストで自分の関数を実行している

//Initiating a constructor function 
    let secret = new SecretCode(); 
    // here this refers to window object/ In window there is no secretNum 
    // So in all if clause will fail since undefined is never greater than the 
    number 
    secret.guessNum(this.secretNum); //You guessed it 
    // Same reason as of above. 
    secret.guessNum(this._secretNum); //You guessed it 
    // In below case you are trying to pass an argument which is no where 
    defined 
    // So it is showing not defined 
    secret.guessNum(secretNum); //is not defined 
    secret.guessNum(_secretNum); //is not defined 
    // In this two case you are trying to pass value from constructor function 
    but that is also not defined, & the function is also not returning it 

    console.log(secret.secretNum); //undefined 
    console.log(secret._secretNum); //undefined 
関連する問題