TIL.63 Core J.S - 6. プロトタイプ
出版するカーネルJavaScript-鄭在南 プロトタイプ
新しい演算子を使用してコンストラクション関数(Constructor)を呼び出し、 Constructorで定義した内容に基づいて新しいインスタンスを作成します. では、インスタンスにprotoが自動的に付与され、 である.本番組はConstructor原型の番組を参照.
getName()はthisです.nameなので、その指す場所を見ると
コンストラクタのpropertyプロトタイプオブジェクトの内部およびインスタンスの これは構造関数propertyからそのプロトタイプが何であるかを知る手段である. コンストラクション関数は、読み取り専用プロパティを持つ例外(基本変数-number、string、boolean)に加えて、値を変更することもできます.
インスタンスに同じ名前のプロパティまたはメソッドがある場合、呼び出されるメソッドはソースを削除し、他のオブジェクトに置き換えるのではなく、メソッドの上にメソッドを上書きすることを示します.
あるデータの
プロトタイプ
オブジェクトをプロトタイプ(prototype)としてコピーし(参照)、継承されたような効果を得るタイプをプロトタイプと呼びます.
1.プロトタイプの概念
1.1 constructor, prototype, instance
let instance = new Constructor()
let Person = function (name) {
this._name = name;
}; // 1.생성자 함수 (Constructor)
Person.prototype.getName = function () {
return this._name;
}
let haiin = new Person('Haiin'); // 2.연산자 new 와 함께 haiin 이라는 인스턴스 생성
console.log(haiin)
// Person {
// _name: 'Haiin',
// __proto__: Person { constructor: ƒ Person(), getName: ƒ () }
// 3.인스턴스에는 __proto__라는 프로퍼티가 자동으로 부여됨, Constructor 의 prototype 이라는 프로퍼티를 참조한다.
haiin.__proto__.getName(); // undefined --(1)
getName()はthisです.nameなので、その指す場所を見ると
haiin.__proto__
になります.propertyにはnameがないので、찾고자 하는 식별자가 정의돼 있지 않을 때는 Error 대신 undefined 를 반환한다
というjavascript規約に従ってundefinedに戻ります.__proto__
は省略することができる.1.2コンストラクタ構成
__proto__
オブジェクトの内部にコンストラクタというpropertyが存在し、コンストラクタ(自己)を参照する.let Person = function (name) {
this.name = name;
};
let p1 = new Person('사람1') //{name : '사람1'} true
let p1Proto = Object.getPrototypeOf(p1)
let p2 = new Person.prototype.constructor('사람2') //{name : '사람2'} true
let p3 = new p1Proto.constructor('사람3') //{name : '사람3'} true
let p4 = new p1.__proto__.constructor('사람4') //{name : '사람4'} true
let p5 = new p1.constructor('사람5') //{name : '사람5'} true
[p1, p2, p3, p4, p5].forEach(function (p) {
console.log(p, p instanceof Person)
})
// 모두 동일한 대상을 가리킨다.
2.プロトタイプチェーン
2.1メソッドオーバーフロー
インスタンスに同じ名前のプロパティまたはメソッドがある場合、呼び出されるメソッドは
__proto__
ではなく、メソッドです.let Person = function (name) {
this.name = name;
};
Person.prototype.getName = function () {
return this.name
}
let iu = new Person('지금')
console.log(iu)
iu.getName = function () {
return '바로' + this.name
}
console.log(iu.getName()) // 바로 지금
// 바로 위의 메서드를 호출, 만약 아래의 proto 가 생략이 되었다면 undefined 가 결과로 나와야 함
console.log(iu.__proto__.getName()) // undefined
2.2プロトコルタイプチェーン
あるデータの
__proto__
プロトコル内部には、__proto__
プロトコルがプロトタイプチェーン(prototype chain)と呼ばれ、そのチェーンに沿って検索されることをプロトタイプチェーン(prototype chaining)と呼ぶ.2.3対象専用メソッドの例外
2.4マルチプロトコルチェーン
Reference
この問題について(TIL.63 Core J.S - 6. プロトタイプ), 我々は、より多くの情報をここで見つけました https://velog.io/@h986680/TIL.62-Core-J.S-6.-프로토타입テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol