2. 대상의 원형과 원형 계승

2704 단어

원형

  • 원형 자체는 하나의 대상이고 이 대상의 속성과 방법은 다른 대상에게 접근할 수 있다.
  • 모든 대상은 원형이 되는 잠재력을 가지고 다음 코드는obj를 원형으로 만든다.
  • var obj = {val: 100};
    //              ,       obj     。
    var arr = [];
    arr.__proto__ = obj;
    

    누가 원형을 가지고 있습니까

  • 기본 모든 객체에는 원형이 있음
  • 프로토타입 있는 사람?

  • 기본적으로 모든 함수는prototype
  • 이 있습니다.

    대상에 수동으로prototype을 추가하면 계승을 실현할 수 있습니까

  • 대상이 new 키워드에 맞추어 실례를 만들 수 없기 때문에 아무 소용이 없습니다.

  • 함수의 특수성

  • 함수도 대상의 일종이기 때문에 프로토
  • 도 있다.
  • 함수는 실례를 만들 수 있고prototype
  • 도 있습니다.

    어떻게 대상의 원형에 접근합니까

  • proto 속성을 통해(단 비표준 속성으로 개발 중 사용을 권장하지 않음)
  • constructor 속성을 통해 대상의 구조 함수를 얻어서prototype에 접근하여 원형을 얻어obj.constructor.prototype 접근
  • 구조 함수 생성 대상의 4단계

  • 새로운 대상을 만듭니다(본질적으로 메모리 공간을 열었습니다)
  • 새 대상의 원형 설정
  • 본질적으로 이 메모리 공간에prot 속성을 추가한 것이다
  • proto 속성 값은 구조 함수의prototype과 관련이 있음
  • 는 프로토에게 이렇게 값을 부여하는 새로운 대상에 해당한다.proto = 구조 함수.prototype

  • 실행 구조 함수, 실행 시 새로운this로 설정
  • 새 실례의 주소로 되돌아오기
  • 객체의 속성 액세스 규칙


    먼저 자신을 찾고, 찾지 못하면 원형을 찾고, 원형을 계속 찾는 원형을 찾지 못하며, 종점까지 종점에서undefined로 돌아오지 않는다.

    자신이 이 속성이 없으면 새로 추가된 것과 같고 수정하면 원형적인 속성에 영향을 주지 않는다.


    자신이 이 속성이 없으면 새로 추가된 것과 같고 수정하면 원형적인 속성에 영향을 주지 않는다.


    물려받다

  • js에서 한 대상이 다른 대상의 구성원(속성과 방법)을 사용할 수 있다면 이런 특징은 바로 계승이다.
  • 주류의 대상 언어에서 계승은 클래스와 클래스 간의 관계이고 js에서 계승은 대상과 대상 간의 관계이다.

  • 계승 방식


    1. 기본 원형 계승

    function P() {}
    P.prototype.fun = function(){};
    var p = new P();
    p             ,    fun  
    

    2. 원형 교체

    function P() {}
    P.prototype = {
        constructor: P,//     ,      
        fun: function(){}
    };
    var p = new P();
    

    3、Object.create

    var proObj = {
        fun: function(){}
    };
    var p = Object.create(proObj);
    

    4. 원형 조합식

    function A() {}
    function P() {}
    P.prototype = Object.create(A.prototype);//  1
    P.prototype = new A();//  2
    var p = new P();
    

    속성 복사


    일상적인 개발에서 다중 계승을 실현하는 수요가 존재할 수 있기 때문에 위의 원형 조합식은 이 수요를 완성할 수 있다.그러나 원형 조합식이 너무 많이 끼워 넣으면 속성의 검색 효율에 영향을 미칠 뿐만 아니라 너무 긴 원형도 유지보수에 불리하다.다중 계승을 실현하는 데 또 다른 해결 방안이 있다. 이런 해결 방안은 jQuery 라이브러리에서 제공하는 extend 방법을 대표한다.
    for(var key in Animal.prototype) {
                    Person.prototype[key] = Animal.prototype[key];
                }
                for(var key in HuoXingRen.prototype) {
                    Person.prototype[key] = HuoXingRen.prototype[key];
                }
                Person.prototype.study = function() {
                    console.log('         ');
                };
    

    좋은 웹페이지 즐겨찾기