1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptの'a'['toUpperCase']()はどのように、そしてなぜ動作するのでしょうか?

2022-04-10 13:52:59

質問

JavaScriptは私を驚かせ続けてくれますが、今回もその一例です。私はあるコードに出くわしましたが、最初は理解できませんでした。そこで、私はそれをデバッグし、この発見に至りました。

alert('a'['toUpperCase']());  //alerts 'A'

さて、これはもし toUpperCase() は文字列型のメンバとして定義されていますが、最初は意味が分かりませんでした。

とにかく

  • は、次のように動作します。 toUpperCase は 'a' のメンバーですか?それとも裏で何かが起こっているのでしょうか?
  • その コード 私が読んでいたのは、以下のような機能です。

    function callMethod(method) {
        return function (obj) {
            return obj[method](); //**how can I be sure method will always be a member of obj**
        }
    }
    
    var caps2 = map(['a', 'b', 'c'], callMethod('toUpperCase')); // ['A','B','C'] 
    // ignoring details of map() function which essentially calls methods on every 
    // element of the array and forms another array of result and returns it
    
    

    を呼び出す汎用的な関数です。 ANY メソッドを ANY オブジェクトを作成します。しかし、指定されたメソッドはすでに指定されたオブジェクトの暗黙のメンバになるということでしょうか?

私は、JavaScriptの関数の基本的な概念について、重大な理解が欠けていると確信しています。このことを理解するために私を助けてください。

どのように解決するのですか?

分解してみること。

  • .toUpperCase() のメソッドです。 String.prototype
  • 'a' はプリミティブな値ですが、その オブジェクト表現
  • オブジェクトのプロパティ/メソッドにアクセスするために、ドット表記とブラケット表記の2つの表記があります。

そこで

'a'['toUpperCase'];

を経由したアクセスです。 ブラケット表記 プロパティに toUpperCase から String.prototype . このプロパティは メソッド を追加することで呼び出すことができます。 ()

'a'['toUpperCase']();