[Javascript]プロトタイプチェーン
8947 ワード
継承について...
まず、オブジェクト向けの概念
今はまだ継承がどんな感じなのか分かりませんか?例を挙げる.
スマートフォンと公衆電話には電話の共通点がある.スマートフォンと公衆電話の2つのオブジェクトを作成すると、同じダイヤル、電話に出る共通の動作(メソッド)があり、同じ動作(メソッド)を2つのオブジェクトに含めると、同じコードが2回使用され、コードが長すぎ、作成効率が低下します.したがって、ダイヤルアップと受信方法を含む電話クラスを定義し、スマートフォンと公衆電話に継承する場合は、同じダイヤルアップと受信方法を2つのオブジェクトにそれぞれ宣言する必要はありません.このとき,電話類は親類,スマートフォン/公衆電話類は子類である.
これにより、作成効率とコード分離が向上し、メンテナンスが容易になります.
サブクラスは、親から受信した構成およびメソッドを上書き(再定義)することもできます.
次に、JavaScriptの概念、すなわちプロトコルチェーンについて議論し続けましょう.
プロトタイプチェーン
JavaScriptはプロトコルベースの言語であるため,厳密には継承概念は存在しない.しかし、
私はコードを1行1行分解した.
まず、Phoneというプロトタイプを作成し、getCallという方法を追加しました.
次のサブクラスとしてSmartPhoneプロトコルタイプを作成します.親になるPhoneの作成者をcallメソッドで呼び出します.
その後、
最後に、スマートPhoneオブジェクトを作成してgetCallを行い、スマートPhoneオブジェクトの親にリンクされたgetCallメソッドが正常に動作するようにします.このメソッドはスマートPhoneオブジェクトではありません.
これは
メンバーの追加と上書き
では
まず、オブジェクト向けの概念
상속
を見てみましょう.상속
は、あるクラスまたはオブジェクトのProperty/メソッドが別のオブジェクトによって継承され、新しいクラス/オブジェクトが自分のように使用されることを示すオブジェクト向けのプログラミング用語です.상속
から継承されたクラスを부모 클래스, 슈퍼 클래스, 베이스 클래스, 상위 클래스
、そこから継承されたクラスを자식 클래스, 서브 클래스, 파생 클래스, 하위 클래스
と呼ぶ.これからは親子レベルを使います今はまだ継承がどんな感じなのか分かりませんか?例を挙げる.
スマートフォンと公衆電話には電話の共通点がある.スマートフォンと公衆電話の2つのオブジェクトを作成すると、同じダイヤル、電話に出る共通の動作(メソッド)があり、同じ動作(メソッド)を2つのオブジェクトに含めると、同じコードが2回使用され、コードが長すぎ、作成効率が低下します.したがって、ダイヤルアップと受信方法を含む電話クラスを定義し、スマートフォンと公衆電話に継承する場合は、同じダイヤルアップと受信方法を2つのオブジェクトにそれぞれ宣言する必要はありません.このとき,電話類は親類,スマートフォン/公衆電話類は子類である.
これにより、作成効率とコード分離が向上し、メンテナンスが容易になります.
サブクラスは、親から受信した構成およびメソッドを上書き(再定義)することもできます.
오버라이딩
は、Property/メソッドの名前を保持し、機能のみを変更することを意味します.次に、JavaScriptの概念、すなわちプロトコルチェーンについて議論し続けましょう.
プロトタイプチェーン
JavaScriptはプロトコルベースの言語であるため,厳密には継承概念は存在しない.しかし、
프로토타입 체인
の継承に似た概念がある.let Phone = function () {}; //부모 클래스 Phone과 생성자
Phone.prototype.getCall = function () { //Phone 프로토타입 메소드 정의
return '전화 받기';
}
let SmartPhone = function () { //자식 클래스 SmartPhone
Phone.call(this); //Phone클래스 생성자를 자식 클래스에서 호출
}
SmartPhone.prototype = new Phone(); //프로토타입 체인
let smartPhone = new SmartPhone(); //전화기 클래스를 상속받은 스마트폰 객체 생성
console.log(smartPhone.getCall());
私はコードを1行1行分解した.
まず、Phoneというプロトタイプを作成し、getCallという方法を追加しました.
次のサブクラスとしてSmartPhoneプロトコルタイプを作成します.親になるPhoneの作成者をcallメソッドで呼び出します.
その後、
prototype
プロトコルによってPhoneプロトコルとチェーンがサブクラスに掛けられる.最後に、スマートPhoneオブジェクトを作成してgetCallを行い、スマートPhoneオブジェクトの親にリンクされたgetCallメソッドが正常に動作するようにします.このメソッドはスマートPhoneオブジェクトではありません.
これは
프로토타입 체인
です.オブジェクト向け言語はextendsキーワードで簡単に継承されますが、프로토타입 체인
は複雑に見えます.でも颜よりすぐに惯れるから心配ないメンバーの追加と上書き
では
프로토타입 체인
にメンバーを追加してoverridingを行いましょうlet Phone = function () {
};
Phone.prototype.getCall = function () {
return '전화 받기';
}
let SmartPhone = function () {
Phone.call(this);
}
SmartPhone.prototype = new Phone();
SmartPhone.prototype.getCall = function () { //getCall() 메소드 오버라이딩
return '스마트폰 전화 받기';
};
SmartPhone.prototype.playMusic = function () { //메소드 추가
return '음악 재생';
};
let smartPhone = new SmartPhone();
console.log(smartPhone.getCall());
console.log(smartPhone.playMusic());
Reference
この問題について([Javascript]プロトタイプチェーン), 我々は、より多くの情報をここで見つけました https://velog.io/@bami/Javascript-프로토타입-체인テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol