javascript 의 원형 체인 과 계승

2876 단어
javascript 중의 원형 체인 과 javascipt 중의 원형 체인 과 계승 체 제 를 계승 하 는 것 은 이 언어 가 특유 한 것 이지 만 js 중의 원형 체제 도 그의 특이 성 으로 인해 저 는 학습 과정 에서 많은 곤 혹 스 러 움 을 겪 었 습 니 다. 지금 은 여러 번 자료 와 학습 을 거 친 후에 다음 과 같이 요약 합 니 다.
1. prototype 과proto__
prototype
prototype 이라는 속성 은 js 가 모방 류 의 개념 을 위해 모든 함수 에 채 워 진 속성 입 니 다. 이 속성 은 클래스 만 있 습 니 다.우리 가 함 수 를 만 들 때마다 js 는 자동 으로 이 함수 에 prototype 속성 을 추가 하고 빈 대상 을 가리 킵 니 다 (실제로 이 대상 은 constructor 등 기본 속성 이 있 습 니 다. js 에는 진정한 의미 의 빈 대상 이 거의 없습니다).우리 가 이 함 수 를 구조 함수 로 삼 아 new 연산 자 를 사용 하여 호출 할 때 js 는 구조 함수 의 인 스 턴 스 를 만 들 고 구조 함수 의 prototype 상의 속성 과 방법 을 계승 합 니 다. (사실은 인 스 턴 스 대상 의 proto 속성 을 구조 함수 의 prototype 에 가리 키 는 것 입 니 다)
//constructor
function myObject() {
    this.a = 1;
    this.b = 2;
}
myObject.prototype.c = 3;

var ob1 = new myObject();
console.log(ob1.a) //1
console.log(ob1.c) //3
console.log(ob1.__proto__ === myObject.prototype) //true
console.log(ob1.constructor === myObject) //true

__proto__
__proto__이 속성 은 모든 js 대상 에 게 있 는 속성 입 니 다. 그 값 은 사실 그것 에 대응 하 는 원형 대상 입 니 다.예 를 들 어 ob1.proto__ === myObject.prototype
var a = {x: 1};
var b = new Object();

console.log(a.__proto__ === Object.prototype) //true
console.log(b.__proto__ === Object.prototype) //true

글자 의 양 을 통 해 만 든 대상 이 든 구조 함 수 를 통 해 만 든 대상 이 든 그들의proto__속성 은 모두 그들의 원형 대상 인 Object. prototype 을 가리 키 는 것 입 니 다. (a 와 b 는 모두 Object 의 인 스 턴 스 입 니 다. 상기 ob1 은 my Object 의 인 스 턴 스 입 니 다)
원형 체인
프로 토 타 입 이랑 다 봤 어 요.proto__,원형 체인 을 보면 알 수 있 습 니 다.js 는 prototype 과 를 통 해proto__의 합작 으로 이 루어 진 원형 체인 과 대상 의 계승.
구조 함 수 는 prototype 을 통 해 공유 할 속성 과 방법 을 저장 하고 prototype 이 기 존 대상 을 가리 키 는 것 을 설정 하여 이 대상 을 계승 할 수 있 습 니 다.
대상 의proto__자신의 구조 함 수 를 가리 키 는 prototype.obj.__proto__.__proto__...프로 토 타 입 체인 은 이 로 인해 발생 합 니 다. 우리 의 연산 자 인 스 턴 스 of 를 포함 하여 바로 obj. 를 탐지 합 니 다.proto__.__proto__... === Constructor. prototype 은 obj 가 Constructor 의 인 스 턴 스 인지 검증 합 니 다.
상례 에서 원형 체인 은 ob1 -- > my Object. prototype -- > Object. prototype -- > null 주의: 원형 체인 의 최종 은 null 입 니 다.
원형 체인 이 실현 되 는 관건 은proto__,그것 은 포인터 역할 을 하여 원형 체인 의 상층 원형 대상 을 계속 가리 키 고 있다.인터넷 의 한 장의 그림 을 인용 하 다.
속성 찾기
대상 의 속성 이나 방법 을 찾 을 때 js 는 원형 체인 을 따라 올 라 가 주어진 속성 이나 방법 명 을 찾 을 때 까지 원형 체인 의 정점 인 Object. prototype (Object. prototype. proto = = null) 을 찾 지 못 하면 undefined 로 돌아 갑 니 다.
hasOwnProperty 방법
이것 은 대상 의 원형 체인 에 있 는 속성 을 걸 러 내 는 방법 입 니 다. Object. prototype 에 계승 되 는 hasOwnProperty 방법 입 니 다. 대상 자체 의 방법 만 찾 고 원형 에서 계승 되 는 속성 과 방법 을 찾 지 않 으 려 면 이 방법 을 사용 하여 걸 러 낼 수 있 습 니 다.
function myObject() {
    this.a = 1;
    this.b = 2;
}
myObject.prototype.c = 3;

var o = new myObject();

o.hasOwnProperty('a'); //true
o.hasOwnProperty('b'); //true
o.hasOwnProperty('c'); //false

참조 링크
proto 와 prototype 에서 JS 대상 과 원형 체인 계승 과 원형 체인 원형 계승 을 깊이 이해 합 니 다.

좋은 웹페이지 즐겨찾기