prototype


JavaScript辞書の知識

  • いくつかの基本タイプのデータを除いて、すべて(関数も含む)がオブジェクト/オブジェクトです.
  • 数字、文字列、真値、null、未定義
  • に適用
  • NANは対象ですか?
  • 他のオブジェクト向け言語のclassはありませんが、プロトタイプがあります.
  • その後classが追加されたが、JavaScriptのターゲットとは異なる
  • new演算子による新規オブジェクトの作成
  • ただし、「constructorプロパティが必要かどうか」で再び
  • プロトタイプとは

  • は、属性の1つであり、オブジェクト
  • を指す関数を定義します.
  • 関数オブジェクト属性としてのPrototype:この関数を使用してオブジェクトを作成した場合、どのオブジェクトを継承するかを示します
  • オブジェクトのプロトタイプとして:
  • constructorプロパティ:このオブジェクトの作成者、すなわち定義した関数
  • を指します.
  • protoプロパティ:このプロトタイプに継承された親プロトタイプを指します.
  • その名の通り、親
  • 実際には、すべてのオブジェクトに属性があり、最上位はObject
  • prototypeプロパティは、関数でのみ作成されるのとは逆
  • ここでメンバーを実装すると、同じプロトタイプを持つオブジェクトがメンバーを共有します.
  • したがって、すべてのオブジェクトは(最終オブジェクトがプロトタイプであるため)である.TOString()などの方法を使用できます
  • コードによる理解

    function Example() {}
    // Example.prototype은 Example이라는 프로토타입 객체를 가리킴
    // 해당 객체에는 constructor: Example() 속성과 __proto__: Object 속성이 있음
    
    let exA = new Example();
    // exA.__proto__는 Example 프로토타입 객체를 가리킨
    
    
    Example.prototype.funcA = function() { return 'A'; }
    exA.funcA(); // 'A'가 리턴됨
    
    exA.funcB = function() { return 'B'; }
    let exB = new Example();
    exB.funcB(); // funcB는 prototype에 정의된 함수가 아니므로 exB는 접근할 수 없

    継承

    function FurtherExample() {}
    FutherExample.prototype = new Example();
    // prototype 속성은 prototype 객체를 가리킨다는 점과
    // new 연산자는 새로운 객체를 만든다는 점을 상기하자
    
    let exC = new FurtherExample();
    exC.funcA(); // 'A'가 리턴됨
    
    
    function AnotherExample() {}
    AnotherExample.prototype = Example.prototype;
    // new 연산자를 쓰지 않고 이런식으로 연결해버리면
    // Example에 메소드를 추가해도
    Example.prototype.funcC = function() { return 'C'; }
    let exD = new AnotherExample();
    exD.funcC(); // AnotherExample의 인스턴스에서도 'C'가 리턴됨

    サマリ

  • 関数を定義するとprototypeプロパティとオブジェクトが作成されます
  • したがって、すべてのカスタム関数はジェネレータ
  • prototypeオブジェクトのプロパティの変更は、protoプロパティでそのプロトタイプオブジェクトを指すすべてのオブジェクトに影響します.
  • proto可連鎖
  • prototypeプロパティで指定されたプロトタイプオブジェクトは継承関係を変更します
  • 参考になるところ

  • JavaScript:プロトタイプの理解 @ Nextree
  • prototype@生活コード/JavaScript
  • [Javascript]プロトタイプについて @ medium/@bluesh55