コンストラクターを使用してオブジェクトを作成すると、そのプロパティがこれに追加されます。そして、これに追加された属性は実際にはエンティティによって変化しません。この時点で、私たちのアプローチは非効率的に見えます。例えば:
function her(){this.name = 'anna';}これは、new Her()を使用してインスタンスオブジェクトを作成するたびに、新しい名前属性を生成し、属性に属するメモリに独自のストレージスペースを持つことを意味します。実際、すべてのインスタンスがこの名前属性を共有できるように、プロトタイプに名前属性を追加できます。
function her(){} her.prototype.name = 'anna';このようにして、new Her()を使用してオブジェクトを作成すると、名前属性は新しいオブジェクトの私有財産ではなくなりますが、オブジェクトのプロトタイプに追加されます。このアプローチは非常に効率的ですが、インスタンスオブジェクトの不変の特性のためでもあります。これは確かです。このプロパティを変更すると、作成されたすべての新しいオブジェクトの属性が変更されます。これは私たちが望むものではありません~~~。オブジェクトのパブリックプロパティは、このアプローチに特に適しています。
ここで、以前の例を改善しましょう。
function her(){}; her.prototype.name = 'anna'; her.prototype.tostring = function(){return this.name;} function his(){}; his.prototype = new Her(); his.prototype.constructor = his; his.prototype.sex = 'women';ご覧のとおり、プロトタイプオブジェクトを展開する前に、通常、関連する継承の構築を完了します。そうしないと、His.prototypeのその後の新しい属性メソッドが継承されたものを消去する可能性があります。
function child(f、m){this.eat = f; this.don = m;} child.prototype = new his(); child.prototype.constructor = child.prototype.name = 'jok'; child.prototype.fun = function(){return this.eat + this.don}ご覧のとおり、ToString()を呼び出すことの違いは、実際には舞台裏の操作の数が少ないことです。主な違いはプロパティであり、メソッドの検索作業はHER.PROTOTYPEでより多く発生します。
共有属性をプロトタイプに移行する上記のJavaScript実装方法は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。