プログラミングの世界には基本要素が 2 つだけあり、1 つはデータ、もう 1 つはコードです。プログラミングの世界は、データとコードが分かちがたく絡み合い、無限の生命力を発揮します。
データは本来静かで、常にその固有の性質を維持しようとしますが、コードは自然に活発で、常に世界を変えようとします。
ご存知のとおり、データ コード間の関係は、物質とエネルギーの関係に驚くほど似ています。データにも慣性があり、外力を加えるコードがなければ常に元の状態を維持します。コードはエネルギーのようなもので、その存在の唯一の目的は、データの元の状態を変更するために一生懸命働くことです。コードがデータを変更すると、データの抵抗により、コードの元の傾向にも影響が生じたり、変化したりすることになります。場合によっては、データをコードに変換したり、コードをデータに変換したりすることもできます。E=MC2 のようなデジタル変換式も存在します。しかし、このデータとコードの間の矛盾しながらも統一された操作には、コンピューターの世界の法則が常に反映され、これらの法則はまさに私たちが作成するプログラム ロジックです。
ただし、プログラマーによって世界観が異なるため、これらのデータとコードは異なって見えます。その結果、異なる世界観を持つプログラマーが独自の方法論を用いてプログラミングの世界の進化と発展を推進しています。
ご存知のとおり、今日最も人気のあるプログラミングのアイデアはオブジェクト指向プログラミングです。なぜオブジェクト指向の考え方がプログラミングの世界で急速に普及するのでしょうか?なぜなら、オブジェクト指向の考え方では、データとコードが初めて 1 つに結合され、それが単純なオブジェクト概念でプログラマーに提示されるからです。これにより、元の乱雑なアルゴリズムやサブルーチン、および絡み合った複雑なデータ構造が突然、明確で整然としたオブジェクト構造に分割され、私たちの心の中にあるデータとコードの乱雑な結び目が明確になります。私たちはより明晰な心を持ち、別のレベルの思考からより広大なプログラミングの世界を探索することができます。
第 5 世祖ホンレンは『対象真経』の説法を終えた翌日、弟子たち全員にこう言いました。読む。 "。最年長の弟子である沈秀は、最も理解力のある兄弟として認められており、彼の詩には次のように書かれています。ほこりを上げてください!」この聖句が出てくるとすぐに、兄弟たちの間ですぐにセンセーションを巻き起こし、とてもよく書かれていると皆が言いました。火の頭の僧侶フイだけがそれを見て、静かにため息をつき、壁にこう書きました。「この物体には根がなく、活字も目に見えません。そもそも何もないのに、どこで塵が発生するのでしょうか?」それから彼は首を振って立ち去りました。慧能のガタを読んだ人は皆、「めちゃくちゃに書かれていて理解できない」と言います。紅蓮先生は沈秀の詩を読んで賞賛にうなずき、それから恵能の詩を見て静かに首を横に振った。その夜、紅蓮は静かに慧能を瞑想室に呼び、長年大切にしていたソフトウェア経典を教え、月明かりの下で一晩逃げるように頼みました...
その後、慧能は本当に逃げませんでした。師父の高い期待に応えて、彼は南に禅宗のもう一つの広大な空を創造しました。フイネンが持ち去ったソフトウェア教典の一つが「JavaScript教典」だった!
シンプルさに戻る
JavaScript を理解するには、まずオブジェクトとクラスの概念を手放し、データとコードの原点に戻る必要があります。前述したように、プログラミングの世界にはデータとコードという 2 つの基本要素しかなく、これら 2 つの要素は絡み合っています。 JavaScript は、データとコードを最も原始的なレベルまで単純化します。
JavaScript のデータは非常に単純です。単純なデータには、未定義、null、ブール、数値、文字列の 5 つのタイプしかありませんが、複雑なデータにはオブジェクトという 1 つのタイプしかありません。これは、世界の最も基本的な要素を金属、木、水、火、土に分類し、他の複雑な物質はこれら 5 つの基本要素から構成されるという古典的な中国の単純唯物論に似ています。
JavaScript のコードは、関数という 1 つの形式にのみ反映されます。
注: 上記の単語はすべて小文字です。Number、String、Object、Function などの JavaScript 組み込み関数と混同しないでください。ご存知のとおり、JavaScript 言語では大文字と小文字が区別されます。
JavaScript の識別子、定数、変数、パラメーターは、unfined、null、bool、number、string、object、および function 型の 1 つです。 typeof の戻り値で示される型。これ以外のタイプはありません。
まず単純なデータ型について説明します。
未定義: すべての未知のもの、何もないもの、想像できないものを表し、コードはそれを処理できません。
注: Typeof (未定義) 戻り値も未定義です。
未定義を任意の変数またはプロパティに割り当てることができますが、変数がクリアされるわけではなく、追加のプロパティが追加されます。
null: 概念はありますが、何もありません。何もないところに何かがあるように見え、何かの中に何もないように見える。想像するのは難しいですが、すでにコードで処理できます。
注: Typeof (Null) は Object を返しますが、NULL は Object ではなく、NULL 値を持つ変数は Object ではありません。
ブール値: はい、いいえ、いいえ、疑いはありません。正しいことは正しい、間違っていることは間違っている、絶対に明らかです。コードによって処理でき、コードのフローを制御することもできます。
数: 直線的なもの、大きさと順序が明確、多数ではあるが無秩序ではない。コードのバッチ処理を容易にし、コードの反復とループも制御します。
注: Typeof (nan) と Typeof (Infinity) はどちらも Number を返します。
数値計算に関与する NaN の構造は NaN であり、NaN != NaN です。
無限 / 無限 = NaN。
文字列: 機械の信号ではなく、人間にとって合理的なもの。人間とコンピューターの情報通信、人間の意図のコード理解などはすべてそれに依存しています。
単純型はオブジェクトではありません。JavaScript にはこれらの単純型をオブジェクト化する機能がありません。単純型の定数値が直接割り当てられている識別子、変数、パラメータはオブジェクトではありません。
いわゆる「オブジェクト化」とは、データとコードを複雑な構造に編成する機能です。 JavaScript では、オブジェクト型と関数型のみがオブジェクト化機能を提供します。
クラスなし
オブジェクトはオブジェクトのタイプです。 JavaScript では、データやコードがどれほど複雑であっても、それらをオブジェクトの形式でオブジェクトに整理できます。
しかし、JavaScript には「クラス」という概念がありません。
多くのオブジェクト指向プログラマーにとって、これはおそらく JavaScript を理解するのが最も難しいことです。はい、ほとんどすべてのオブジェクト指向の本で最初に話されるのは、オブジェクト指向の柱である「クラス」の概念です。突然「カテゴリー」がなくなり、私たちは精神的な支えを失ったように感じ、自分に主人がいないように感じます。オブジェクトやクラスを手放して、「オブジェクトにルートがなく、型が見えない」状態に到達するのは簡単ではないようです。
それでは、まず JavaScript プログラムを見てみましょう:
[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
この JavaScript プログラムは、最初に生命オブジェクト life を生成しましたが、生命が誕生したとき、それはプロパティやメソッドを持たない単なるオブジェクトでした。最初のライフプロセスには、「卵細胞」のように見える body 属性と Say メソッドがあります。第二の人生で「尻尾」と「エラ」が生えた、それは明らかに「オタマジャクシ」だった。 3度目の人生で尾と鰓の属性は消失したが、「4本の足」と「肺」が生え、脚と肺の属性を獲得し、最終的には「カエル」となった。豊かな想像力があれば、ハンサムな「王子様」に変身させたり、美しい「お姫さま」などと結婚させたりすることもできるかもしれません。ただし、このプログラムを読んだ後、次の質問について考えてください:
クラスは必ず必要ですか?
子供の頃、「母親を探している小さなオタマジャクシ」についてのおとぎ話をまだ覚えていますか?おそらく昨夜、あなたのお子さんはたまたまこの美しいおとぎ話を聞きながら眠りに落ちたのでしょう。かわいい小さなオタマジャクシは、自分の種類が進化し続けるうちに、徐々に母親と同じ「種類」になり、母親を見つけました。このおとぎ話に含まれるプログラミングの哲学は次のとおりです。オブジェクトの「クラス」はゼロから生まれ、進化し続け、最終的には消滅します...
「クラス」は確かに複雑な現実世界を理解するのに役立ちます、この混沌とした現実世界は分類する必要があります。しかし、思考が「カテゴリー」に縛られてしまうと、「カテゴリー」が「飽き」てしまいます。想像してみてください。生物が最初から固定の「クラス」を割り当てられたとしても、進化することはできるでしょうか?オタマジャクシはカエルになれるでしょうか?おたまじゃくしが母親を探している話も子供たちに話してもらえますか?
したがって、JavaScript には「クラス」は存在せず、クラスはオブジェクトと統合されて見えなくなります。 「クラス」という概念を手放したからこそ、JavaScriptのオブジェクトは他のプログラミング言語にはない生命力を持っています。
この時、心の奥底で何かを感じ始めたら、あなたは徐々に JavaScript の禅を理解し始めています。
関数の魔法
次に、JavaScript 関数の魔法について説明します。
JavaScript コードには関数という形式が 1 つだけあり、関数は関数の型です。おそらく他のプログラミング言語にはプロシージャやメソッドなどのコード概念がありますが、JavaScript では関数の形式は 1 つだけです。関数を記述するときは、関数型のエンティティを作成するだけです。次のプログラムを見てください:
[Ctrl A を押してすべて選択 注: 外部 Js を導入する必要がある場合は、実行前に更新する必要があります]
このコードは実行後に見ることができます。 typeof(myfunc) が返すのは function です。上記の関数の書き方を「定義式」と呼びますが、次のような「変数式」に書き換えると分かりやすくなります:
[Ctrl A Full Optional note:外部 Js を導入する必要がある場合は、実行前にリフレッシュする必要があります]
ここでは変数 myfunc が明確に定義されており、その初期値が関数エンティティに代入されています。したがって、typeof(myfunc) も関数を返します。実際、これら 2 つの関数の記述方法は同等であり、いくつかの小さな違いを除いて、それらの内部実装はまったく同じです。つまり、作成する JavaScript 関数は単なる名前付き変数であり、変数の型は関数であり、変数の値は作成した関数のコード本体です。
賢明な方は、すぐにさらに質問するかもしれません。関数は単なる変数なので、変数には任意に値を割り当てて、どこでも使用できるのでしょうか?
次のコードを見てみましょう:
[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
このプログラムを実行した結果、答えは「はい」であることがわかります。関数が初めて呼び出された後、関数変数には新しい関数コード本体が割り当てられるため、関数が 2 回目に呼び出されるときは、異なる出力が表示されます。
さて、上記のコードを最初に定義した関数形式に変更しましょう:
[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新する必要があります。実行する]
まったく同じシグネチャを持つ 2 つの関数が他のプログラミング言語では違法であるのは当然です。しかし、JavaScript ではこれが当てはまります。しかし、プログラムを実行した後、奇妙な現象が発見されました。2 つの呼び出しは、最後の関数によって出力された値だけでした。明らかに、最初の関数は何も行いません。これはなぜでしょうか?
JavaScript 実行エンジンはプログラムを 1 行ずつ解析して実行するのではなく、プログラムを部分的に解析して実行することがわかりました。また、同じプログラムの解析と実行では、定義されている関数ステートメントが最初に抽出されて実行されます。関数定義の実行後、他のステートメントコードが順番に実行されます。つまり、myfunc が初めて呼び出される前に、最初の関数ステートメントによって定義されたコード ロジックが 2 番目の関数定義ステートメントによって上書きされます。したがって、両方の呼び出しで最後の関数ロジックが実行されます。
たとえば、この JavaScript コードを 2 つの部分に分割する場合は、HTML に記述し、
[Ctrl A ですべて選択 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
この時点で、出力は順番に表示されます。また、JavaScript が実際に部分ごとに実行されることも証明されています。
コード内で定義された関数ステートメントが最初に実行されます。これは、静的言語のコンパイルの概念に少し似ています。したがって、この機能を JavaScript の「プリコンパイル」と呼ぶ人もいます。
ほとんどの場合、これらの詳細にこだわる必要はありません。 1 つだけ覚えておいてください。JavaScript のコードも一種のデータであり、任意に割り当てたり変更したりすることもでき、その値はコードのロジックです。ただし、一般的なデータとは異なり、関数を呼び出して実行することができます。
しかし、JavaScript 関数がこの点だけで優れているとしたら、C の関数ポインタ、DELPHI のメソッド ポインタ、C# のデリゲートと比較すると、どれほど奇妙なことでしょう。ただし、JavaScript 関数の魅力は他の 2 つの側面にも反映されています。1 つは、関数型自体もオブジェクト化できる機能であり、2 つ目は、関数とオブジェクトを超越的に組み合わせる機能です。
素晴らしいオブジェクト
まず、関数のオブジェクト化機能について話しましょう。
どの関数でも属性を動的に追加または削除できます。これらの属性は、単純な型、オブジェクト、またはその他の関数です。つまり、関数はオブジェクトの特性をすべて備えており、関数をオブジェクトとして使用できます。実際、関数はオブジェクトですが、通常のオブジェクトよりも括弧「()」演算子が 1 つ多くあり、この演算子は関数のロジックを実行するために使用されます。つまり、関数自体は引き続き呼び出すことができますが、まったく同じであることを除いて、一般オブジェクトを呼び出すことはできません。以下のコードを見てください:
[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
このコードでは、Sing 関数が定義された後、作者と詩の属性が Sing 関数に動的に追加されます。著者と詩の属性を別の著者と詩に設定すると、Sing() を呼び出したときに異なる結果が表示されます。この例では、JavaScript の関数がオブジェクトの本質であることを詩的な表現で理解するとともに、JavaScript 言語の美しさを感じてもらうことができます。
さて、上記の説明から、関数型のものはオブジェクト型と同じであることが理解できるはずです。このようなものを私たちは「オブジェクト」と呼んでいます。これらの「オブジェクト」には「プロパティ」と「メソッド」の両方があるため、実際にこのように見ることができます。しかし、次のコードは新たな疑問をもたらします:
[Ctrl A を押してすべてを選択します。注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
はい、プロパティ名またはメソッド名を添え字として使用すると、オブジェクトと関数にアクセスして配列のように処理できます。では、それは配列と考えるべきでしょうか、それともオブジェクトと考えるべきでしょうか?
配列は線形データ構造としてみなされる必要があり、一般に特定の規則があり、統一されたバッチ反復操作に適していることがわかっています。オブジェクトは個別のデータ構造であり、分散した個人化されたものを記述するのに適しており、粒子に似ています。したがって、「オブジェクトは JavaScript の波ですか、それとも粒子ですか?」と尋ねることもできます。
物体量子論があるなら、答えは波動粒子双対性であるに違いありません。
したがって、JavaScript の関数とオブジェクトは、オブジェクトと配列の両方の特性を持ちます。ここでの配列は「辞書」と呼ばれ、任意に拡張できる名前と値のペアのコレクションです。実際、オブジェクトと関数の内部実装は辞書構造になっていますが、この辞書構造は厳密かつ絶妙な構文によって豊かな外観を示します。量子力学では、ある場所では粒子を使用して問題を説明し、対処するのと同じように、他の場所では波を使用して問題を説明し、対処します。必要に応じて、オブジェクトまたは配列の使用を自由に選択して、問題を説明したり処理したりすることもできます。 JavaScript のこれらの素晴らしい機能を理解することができれば、簡潔で強力なコードをたくさん書くことができます。
オブジェクトを置く
関数とオブジェクトの超越的な組み合わせを見てみましょう。
オブジェクト指向プログラミングの世界では、データとコードの有機的な組み合わせがオブジェクトの概念を構成します。オブジェクトが作成されて以来、プログラミングの世界は 2 つの部分に分割され、1 つはオブジェクトの内部の世界、もう 1 つはオブジェクトの外部の世界です。オブジェクトは本質的に利己的であり、外部の世界は許可なくオブジェクトの内部にアクセスすることはできません。オブジェクトには、外部の世界にプロパティとメソッドを提供し、他の人に役立つ寛大な側面もあります。しかし、ここで「対象の自己認識」という興味深い問題について話さなければなりません。
え?そうですか?対象者は自己認識していますか?
おそらく多くのプログラマーにとって、これは実際に初めて聞いたものでしょう。しかし、これをC、C#、Javaで、selfをDELPHIで、私をVBで見てみると、ふと気づくかもしれません。もちろん、「それ以上は何もしない」ということも可能です。
しかし、物体が世界を内と外に分けるとき、物体の「自己」もまた現れます。 「自己認識」は人生の最も基本的な特性です!オブジェクトの強力な生命力があるからこそ、プログラミングの世界は無限の生命力と生命力に満ち溢れているのです。
しかし、その対象の「自意識」は私たちに幸福をもたらすだけでなく、苦しみや悩みももたらします。私たちは物に対してあまりにも多くの欲望を抱き、物がもっとできることを常に期待しています。ただし、オブジェクトの利己性によりシステム リソースをめぐって相互に競合し、オブジェクトの利己性によりオブジェクトが複雑かつ肥大化し、オブジェクトの自己欺瞞により長引くエラーや例外が発生することがよくあります。なぜ私たちはこれほどの痛みや悩みを抱えているのでしょうか?
このため、オブジェクトツリーの下で81日間考え続け、ついに人生の苦しみは欲望から来ているが、欲望の根源は自己認識から来ていることに気づいた人がいました。そこで彼は「我」を捨て、仏陀となり、衆生を救い、真実の経典を広めるようになりました。彼の名前は釈迦牟尼仏であり、彼の説いた経典の一つに『JavaScript経』があります。
JavaScriptにもこれがありますが、これはC、C#、Javaなどの言語のこれとは異なります。一般的なプログラミング言語では、これはオブジェクトそのものですが、JavaScript では必ずしもそうではありません。これは私かもしれないし、あなたかもしれないし、彼かもしれません。とにかく、あなたは私の中にいて、私はあなたの中にいます。したがって、JavaScript ではこの意味を理解するために本来の「self」を使用することはできません。そのためには、まず元の対象である「自分」を手放す必要があります。
次のコードを見てみましょう:
[Ctrl A を押してすべてを選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]
上記のコードからわかるように、同じ関数をさまざまな角度から呼び出すことができ、これは必ずしも関数自体が属するオブジェクトであるとは限りません。これは、オブジェクトを関数要素と組み合わせるときの単なる概念です。この組み合わせは、一般的なオブジェクト言語のデフォルトの組み合わせよりも柔軟であり、より独立していて自由に見えます。
JavaScript 関数では、現在提供されている「この」オブジェクトとしてのみこれを扱うことができます。これは特別な組み込みパラメータです。このパラメータに従って、「この」オブジェクトのプロパティとメソッドにアクセスできますが、このパラメータに値を割り当てることはできません。一般的なオブジェクト言語では、メソッド本体コード内の this は省略可能で、デフォルトではメンバーは最初に "self" になります。ただし、JavaScript は異なります。「self」がないため、「this」オブジェクトにアクセスする場合、これを省略することはできません。
JavaScript は、このパラメーターを渡すさまざまな形式と手段を提供しています。その中で、現時点では、BillGates.WhoAmI() や SteveJobs.WhoAmI() などの形式がこのパラメーターを渡す最も正式な形式です。 this 関数が属するオブジェクト自体です。多くの場合、仙人や仏様から花を拝借する念仏の形はあまり使いません。しかし、JavaScript の「自分」は他のプログラミング言語の「自分」とは違うということを理解していれば、それは手放された「自分」なのです。これが JavaScript の独特の世界観です。
オブジェクト スケッチ
これまで多くのトピックについて説明してきましたが、議論するのを忘れていた非常に基本的な質問があります。それは、オブジェクトをどのように作成するかということです。
前の例では、すでにオブジェクトの作成が行われています。私たちは JavaScript Object Notation (略称 JSON) と呼ばれる形式を使用します。これは中国語に翻訳すると「JavaScript Object Notation」となります。
JSON は、オブジェクトを作成する非常に簡単な方法を提供します。たとえば、
属性を指定せずにオブジェクトを作成します:
var o = {};
オブジェクトを作成して属性と初期値を設定します:
var person = {name: "Angel", age: 18、既婚: false};
オブジェクトを作成し、プロパティとメソッドを設定します:
var Speaker = {text: "Hello World",say: function(){alert(this.text)}}; > 他のオブジェクト、オブジェクトの配列などをネストして、より複雑なオブジェクトを作成します:
var company =
{
name: "Microsoft",
product: "softwares",
chair : {名前: "ビル・ゲイツ"、年齢: 53、既婚: true}、
従業員: [{名前: "エンジェル"、年齢: 26、既婚: false}、{名前: "ハンソン"、年齢: 32 , Marred: true}],
readme: function() {document.write(this.name " product " this.product);}
}
JSON の形式は中括弧 "{ }" 「,」で囲まれた項目のリスト。各項目はカンマ「,」で区切られ、項目は属性名と属性値をコロン「:」で区切ったものです。これは典型的な辞書表現であり、JavaScript のオブジェクトが辞書構造であることを再度示しています。オブジェクトがどれほど複雑であっても、JSON コードを使用して作成して割り当てることができます。
実際、JSON は JavaScript オブジェクトの最適なシリアル化形式であり、XML よりも簡潔でスペースを節約できます。オブジェクトを JSON 形式の文字列として使用して、ネットワーク間で情報を自由に送信および交換できます。この JSON 文字列を JavaScript オブジェクトに変換する必要がある場合は、強力なデジタル変換エンジンである eval 関数を使用するだけで、すぐに JavaScript メモリ オブジェクトを取得できます。 JSON の素朴で自然な美しさがあるからこそ、彼女は AJAX の舞台でまばゆいばかりのスターとなるのです。
JavaScript はこのように、一見複雑なオブジェクト指向のものを非常に簡潔な形で表現しています。パートナーの派手で濃いメイクを落として、澄んだ瞳をパートナーに与えましょう!
オブジェクトの構築
さて、オブジェクトを作成する別の方法について説明しましょう。
JSON に加えて、JavaScript では関数と組み合わせた new 演算子を使用してオブジェクトを作成できます。例:
function MyFunc() {} //空の関数を定義します。var anObj = new MyFunc(); // new 演算子と MyFun 関数を使用してオブジェクトを作成します
JavaScript でオブジェクトを作成するこの方法は、どのように理解すればよいでしょうか。
実際、上記のコードは次の同等の形式に書き直すことができます:
function MyFunc(){};
var anObj = {}; // オブジェクトを作成します
MyFunc。 (anObj); //このポインターとして anObj オブジェクトを使用して MyFunc 関数を呼び出します
このように理解すると、JavaScript は最初に new 演算子を使用してオブジェクトを作成し、次にこのオブジェクトをこのパラメーターとして使用して次の関数を呼び出します。実際、これは JavaScript が内部的に行っていることであり、どの関数もこのように呼び出すことができます。しかし、「anObj = new MyFunc()」の形式から、これが C と C# のオブジェクトの作成方法であることがわかります。すべての道は霊山に通じており、同じ目的地に通じていることが分かりました。
これを見ると、なぜこの MyFunc をコンストラクターとして使用できないのかと思うかもしれません。おめでとうございます。正解しました! JavaScript もそう考えています。以下のコードを見てください:
コードをコピー コードは次のとおりです:
1 function Person(name) //パラメーター付きコンストラクター
2 {
3 this.name = name; //このオブジェクトの属性にパラメータ値を割り当てます
4 this.SayHello = function() {alert("こんにちは、" this. name) ;}; //このオブジェクトの SayHello メソッドを定義します。
5 };
6
7 function Employee(名前, 給与) //サブコンストラクター
8 {
9 親コンストラクター
10 this; .salary =給与; //この
11 の給与属性を設定します this.ShowMeTheMoney = function() {alert(this.name " $" this.salary);} // ShowMeTheMoney メソッドを追加します。
12 }; // Empolyee コンストラクターを使用して SteveJobs オブジェクトを作成します
16
17 BillGates.SayHello(); // 表示: 私は Bill Gates
18 SteveJobs.SayHello (); //表示: 私はスティーブ ジョブズです
19 SteveJobs.ShowMeTheMoney() //表示: スティーブ ジョブズ $1234
20
21 alter(BillGates.constructor == Person); : true
22 alter(SteveJobs.constructor == Employee); //表示: true
23
24 alter(BillGates.SayHello == SteveJobs.SayHello); //表示: false
このコードは、関数がコンストラクターとして使用できるだけでなく、パラメーターを受け取り、メンバーやメソッドをオブジェクトに追加できることを示しています。 9 行目で、Employee コンストラクターは、パラメーターとして受け取った this を使用して Person コンストラクターを呼び出します。これは、基本クラスのコンストラクターを呼び出すのと同じです。行 21 と行 22 は、次のことも示しています。BillGates は person から構築され、SteveJobs は Employee から構築されます。オブジェクトの組み込みコンストラクター プロパティは、オブジェクトの構築に使用される特定の関数も指定します。
実際、関数を「クラス」として考えるなら、彼女は元々「クラス」の性質を持っているので「クラス」です。そうじゃない?彼女が産んだ息子は皆同じ特性を持ち、コンストラクターもクラス名と同じ!
現在のページ 1/2 12次のページで全文を読む