[JS]プロトタイプオブジェクト
17908 ワード
ジェネレータでメソッドを定義する方法の問題
function Circle(center, radius) {
this.center = center;
this.radius = radius;
this.area = function () {
return Math.PI * this.radius ** 2;
};
}
const c1 = new Circle({ x: 0, y: 0 }, 2.0);
const c2 = new Circle({ x: 0, y: 1 }, 4.0);
const c3 = new Circle({ x: 1, y: 0 }, 5.0);
Circle内で面積を求める領域メソッドを定義した.Circleジェネレータによって生成されるインスタンスc 1、c 2、およびc 3には、同じ方法が含まれる.これは、作成方法が同じ操作を実行するインスタンス数と同じであることを意味します.
これにより、メモリの浪費が発生します.
プロトタイプオブジェクト
これらの問題は、プロトタイプオブジェクトでメソッドを定義することによって解決できます.
function Circle(center, radius) {
this.center = center;
this.radius = radius;
}
Circle.prototype.area = function () {
return Math.PI * this.radius ** 2;
};
const c1 = new Circle({ x: 0, y: 0 }, 2.0);
const c2 = new Circle({ x: 0, y: 1 }, 4.0);
const c3 = new Circle({ x: 1, y: 0 }, 5.0);
console.log(c1.area()); // 12.566370614359172
__proto__
プロペッティとは、その対象に引き継がれた親の対象を指す.したがって、オブジェクトは、
__proto__
propertyが指す親オブジェクトのpropertyを使用することができる.インスタンスc 1,c 2,c 3は、Circleをコンストラクション関数として使用し、
__proto__
コンストラクション関数Circleのprototype objectを指す.したがって、インスタンスはCircleプロトタイプオブジェクトが持つ領域メソッドを使用することができる.これにより、インスタンスにメソッドを追加することなく、インスタンスがメソッドを使用できます.その結果、メモリの無駄を防ぐことができます.
プロトタイプオブジェクトのプロトタイプ
関数定義時に発生した
함수 객체
とPrototype Object
prototype
property.prototype
propertyからアクセス可能である.constructor
和__proto__
__proto__
はPrototype Link
生成者のプロトタイプオブジェクトを指す.__proto__
基本的に対象です.原型を指す.すなわち,プロトタイプオブジェクトのプロトタイプはオブジェクトである.原型です.プロトタイプオブジェクトの置換
function Circle(center, radius) {
this.center = center;
this.radius = radius;
}
Circle.prototype = {
constructor: Circle,
area() {
return Math.PI * this.radius ** 2;
},
};
const c1 = new Circle({ x: 0, y: 0 }, 2.0);
console.log(c1.area()); // 12.566370614359172
インスタンスがプロトタイプを継承する時間
function Circle(center, radius) {
this.center = center;
this.radius = radius;
}
const c1 = new Circle({ x: 0, y: 0 }, 2.0);
Circle.prototype = {
constructor: Circle,
area() {
return Math.PI * this.radius ** 2;
},
};
console.log(c1.area()); // TypeError: c1.area is not a function
c 1インスタンスのpropertyは、Circleの作成時のpropertyを継承します.c 1インスタンスを作成すると、Circleのプロトタイプ断面ビームが交換されても、置換されたオブジェクトから断面ビームは継承されません.function Circle(center, radius) {
this.center = center;
this.radius = radius;
}
const c1 = new Circle({ x: 0, y: 0 }, 2.0);
Circle.prototype.area = function () {
return Math.PI * this.radius ** 2;
};
console.log(c1.area()); // 12.566370614359172
ソース
Reference
この問題について([JS]プロトタイプオブジェクト), 我々は、より多くの情報をここで見つけました https://velog.io/@yejineee/프로토타입-객체テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol