コードは次のとおりです:
しかし、このオブジェクトをプロトタイプとして使用するにはどうすればよいでしょうか?
まず第一に、JSON オブジェクトにコンストラクター メソッドを含めることは不可能なので、単純な「ファクトリー」を作成し、特に作成を担当するメソッドを記述しましょう。
しかし、この方法では People をプロトタイプとして使用できないことがわかりました。 — —プロトタイプチェーンの原理に関するこの記事では、次のプロセスについて考えてみましょう:
var p=new People();==>p.__proto__=People.prototype。したがって、p.SayHello() を実行するときに、People.prototype にアクセスしてそれを見つけますが、何も見つかりません。
People.prototype.SayHello=function(){} であれば、この問題は解決できます。しかし、プロトタイプを持つことができるのは関数だけであることはわかっています。
それでは、先ほどの導出式について考えてみましょう。p.SayHello() はどのように作成できるでしょうか? p.__proto__=People とできればいいですね。
new では、特定のオブジェクトの __proto__ は特定の関数のプロトタイプとのみ等しいため、関数 X を設定し、p.__proto__=X.prototype とします。次に、X.prototype=People を設定します。関係は次のとおりです:
コードをコピー
コードは次のとおりです: これは、X を使用して中間変数を作成することと同等であり、JSON オブジェクトの内部プロパティにアクセスできます。しかし、これはエレガントではありませんか?オブジェクトを作成するたびに、このような補助関数を記述する必要があります。さて、このプロセスをカプセル化しましょう:
コードをコピー
コードは次のとおりです:
return result;
var people(People,"kym",21); people.SayHello();
しかし、これには欠点もあります。つまり、クラスを追加するたびに、Factory に新しいメソッドを登録する必要があり、これが非常に面倒でした。かなり前の話です。 遊び方: call と apply の違いについては説明しましたが、ここでのパラメータは固定されていないため、1 つずつリストすることはできません。そのため、ここで apply を使用してこのメソッドを改善できます。 🎜>
コードをコピーします
コードは次のとおりです: