>  기사  >  웹 프론트엔드  >  js의 프로토타입 체인이란 무엇입니까?

js의 프로토타입 체인이란 무엇입니까?

anonymity
anonymity원래의
2019-05-29 10:59:244156검색

각 생성자에는 프로토타입 객체가 있습니다. 프로토타입 객체에는 생성자에 대한 포인터가 포함되어 있으며, 인스턴스에는 프로토타입 객체 내부에 대한 포인터가 포함되어 있습니다. 프로토타입 객체(1)의 인스턴스를 다른 프로토타입 객체(2)와 동일하게 만듭니다.

이때 프로토타입 객체(2)는 프로토타입 객체(1)에 대한 포인터를 포함합니다.

다음의 인스턴스를 프로토타입 객체(2)는 프로토타입 객체(3)와 동일합니다. 이 계층별 진행은 인스턴스와 프로토타입의 체인을 형성합니다. 이것이 프로토타입 체인

js의 프로토타입 체인이란 무엇입니까?

프로토타입 체인

의 개념입니다.

모든 생성자에는 프로토타입 개체가 있고 모든 생성자 함수 인스턴스에는 프로토타입 개체를 가리키는 내부 포인터(proto)가 포함되어 있습니다. 첫 번째 생성자의 프로토타입 개체를 두 번째 생성자의 인스턴스와 동일하게 만들면 해당 프로토타입 개체의 프로토타입 개체가 됩니다. 첫 번째 생성자는 두 번째 생성자에 대한 포인터를 포함하고 세 번째 프로토타입 개체는 첫 번째 생성자의 인스턴스와 동일하므로 세 번째 프로토타입 개체에도 첫 번째 프로토타입 개체에 대한 포인터가 포함됩니다. 등등 프로토타입 체인의 인스턴스가 되기에 충분합니다. 이것이 프로토타입 체인의 기본 개념입니다

function One(){
 }
 function Two(){
 }
 function Three(){
 }
 Two.prototype=new One();
 Three.prototype=new Two();
 var three=new Three();
 console.log(three);
 console.log(three.__proto__===Three.prototype) //true
 console.log(three.__proto__.__proto__===Two.prototype) //true
 console.log(three.__proto__.__proto__.__proto__===One.prototype)  //true
 console.log(three.__proto__.__proto__.__proto__.__proto__===Object.prototype)  //true

객체 인스턴스에서는 객체 프로토타입에 액세스하는 방법

1.

이 속성은 ECMAScript 속성이 아닌 브라우저에서 지원하는 속성입니다.

2.Object.getPrototypeOf

3 constructor.prototype의 메소드를 사용하세요

proto를 지원하지 않는 브라우저의 경우 생성자를 사용하여 액세스할 수 있습니다. 객체의 생성자를 사용하고 프로토타입을 사용하여 프로토타입에 액세스합니다

프로토타입 체인 사용 ANUGLAR 범위 설명

개발 프로세스 중에 컨트롤러 중첩이 있을 수 있습니다. 다음 코드를 살펴보세요.

  <div ng-controller="OuterCtrl">
        <span>{{a}}</span>
         <div ng-controller="InnerCtrl">
            <span>{{a}}</span>
         </div>
     </div>
    <script>
    function OuterCtrl($scope) {
    $scope.a = 1;
    }
    function InnerCtrl($scope) {
    }
    </script>

우리는 인터페이스는 두 개의 1을 표시하며 우리는 OuterCtrl의 범위에만 있습니다. a 변수가 정의되었지만 인터페이스에 의해 우리에게 주어진 결과는 이제 두 a 모두 값을 갖는다는 것입니다. 이제 자체 컨트롤러의 a는 상위 컨트롤러에서 상속됩니다

상위-하위 범위를 두 개의 프로토타입 객체로 생각할 수 있습니다. 하나의 프로토타입 객체가 다른 프로토타입 객체의 인스턴스를 상속하는 객체입니다.

위 내용은 js의 프로토타입 체인이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.