2017-07-11 6 views
1

learning javascriptの間、プロパティ名によって動作が異なる例があります。JavaScript "this"キーワードはプロパティ名に基づいて異なる動作をします

  • それが何(FF 54)またはいくつかの異常なコードのいずれかを印刷していないケース2においては、
  • (理解可能である)未定義印刷ケース1では(このスクリプトを実行するときに見られる)

質問

プロパティ名を変更すると、別の動作が発生するのはなぜですか?ケース番号2で

<!DOCTYPE html> 
 
<html lang="en"> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>tests</title> 
 
    <script> 
 
    "use strict"; 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <ul> 
 
    <li>Case 1 <br> 
 
     <script> 
 
     let myAbstractObject2 = { 
 
      text1: "someText", 
 
      someMethod1() { 
 
      document.write(`[Output] text1 = ${this.text1}!<br>`); 
 
      } 
 
     }; 
 

 
     myAbstractObject2.someMethod1(); 
 

 
     (true ? myAbstractObject2.someMethod1 : null)(); 
 
     </script> 
 
    </li> 
 
    <li>Case 2 <br> 
 
     <script> 
 
     let myAbstractObject3 = { 
 
      name: "someText", 
 
      someMethod1() { 
 
      document.write(`[Output] name = ${this.name}!<br>`); 
 
      } 
 
     }; 
 

 
     myAbstractObject3.someMethod1(); 
 

 
     (true ? myAbstractObject3.someMethod1 : null)(); 
 
     </script> 
 
    </li> 
 
    </ul> 
 
</body> 
 

 
</html>

+0

liオブジェクトからnameプロパティを取得することは可能ですか? say2やtext2を使っても同じ結果が得られますか? – Tommy

+2

@Tommyプロパティは 'window'から取られています。[window.name](// mdn.io/window.name) –

+0

@UlysseBN ok cool、だから私は間違ったオブジェクトだけを考えました。 – Tommy

答えて

4

this.namewindow.nameを参照します。だからあなたはGUIDを取得します。

ウィンドウのグローバル属性の定義済みのプロパティであるキーワードを使用したことを除いて、基本的にケース1(thisがウィンドウのグローバル属性に変わります)と同じです。

+0

@naazこの回答はあなたの質問に合っていますか? –

+1

答えを完全に理解するために、私はチュートリアルで十分に説明していません。それは理にかなっています。 – naaz

関連する問題