구조 함수 원형 수정 - JavaScript 의 대상 (2)
3298 단어 JavaScript
오늘 은 원형 계승 을 쓰 지 않 고 잘못된 부분 을 살 펴 보 겠 습 니 다. "구조 함수 의 원형 (prototype) 을 바 꾸 어 마법 적 인 (magically) 대상 과 이미 존재 하 는 대상 을 업데이트 합 니 다."
이것 은 완전히 잘못된 것 입 니 다. 자 바스 크 립 트 를 해석 할 때 마법 (magic) 이라는 단 어 를 사용 한 작 가 를 믿 지 마 세 요.
function C() {} //constructor
var x = new C();
C.prototype.prop = 2;
var y = new C();
alert(x.prop);
alert(y.prop);
이 코드 는 alert "2" 와 "2" 를 사용 합 니 다. 이것 은 위 따옴표 의 정 의 를 증명 하 는 것 같 습 니 다. x 대상 이 생 성 된 후에 속성 prop 를 추 가 했 기 때 문 입 니 다.마법 같은?사실은 아니 야, 아래 의 예 를 봐.
function C() {} //constructor
var x = new C();
C.prototype = {prop: 2};
var y = new C();
alert(x.prop);
alert(y.prop);
이 코드 는 alert "undefined" 와 "2" 를 사용 합 니 다.
첫 번 째 예 에서 대상 x 와 y 는 모두 속성 prop 가 있다.그들 은 대상 이 인용 한 원형 에 숨 어 있 습 니 다.prop 속성 에 접근 할 때 자 바스 크 립 트 는 대상 자체 에서 찾 을 수 없 으 며, 이후 프로 토 타 입 체인 을 검색 하여 프로 토 타 입 체인 에서 찾 아 되 돌려 줍 니 다.이것 은 프로그래머 에 게 투명 하 다.원형 에 새로운 속성 을 추가 할 때 대상 x 는 변 하지 않 습 니 다.prop 속성 에 접근 할 때 업 데 이 트 된 원형 에서 찾 을 수 있 습 니 다.
두 번 째 예 에서 우 리 는 원형 을 새로운 대상 으로 바 꾸 었 고 x 는 낡은 원형 을 사 용 했 지만 y 는 새로운 원형 을 사 용 했 기 때문에 x 와 y 는 원형 을 공유 하지 않 았 다.오래된 원형 에는 prop 속성 이 존재 하지 않 음 이 분명 합 니 다.더 나 쁜 것 은 지금 유일한 방문 점 을 잃 어 버 렸 다 는 것 이다.대상 을 만 드 는 문법 은 같 지만 그들 은 다르다.
또한 모든 대상 에 하나의 constructor 속성 이 구조 함 수 를 가리 키 는 것 으로 알려 져 있다.그러나 prop 처럼 constructor 속성 은 대상 자체 가 아 닌 원형 에 존재 합 니 다.
원형 을 다시 쓰 는 동시에 constructor 속성 도 다시 썼 습 니 다. 다음 과 같 습 니 다.
alert(x.constructor); // "function C() {}"
alert(y.constructor); // "function Object() { [native code] }"
따라서 원형 을 다시 쓰 면 constructor 속성 은 믿 을 수 없 지만 원형 을 다시 쓰 는 것 은 자 바스 크 립 트 의 중요 한 기술 입 니 다.번역자:
본 고 는 자 바스 크 립 트 에서 원형 을 다시 쓴 후 원형 이 일치 하지 않 는 문제 와 constructor 속성 지향 문 제 를 다 루 고 있다.동적 수정 원형 대상 은 기 존 대상 에서 유효 하지 않 습 니 다.프로 토 타 입 대상 을 다시 쓰 면 constructor 의 지향 은 믿 을 수 없습니다. 프로 토 타 입 을 다시 쓴 후에 constructor 속성 을 다시 할당 할 수 있 습 니 다.... 와 같다
function C();
C.prototype = {};
C.prototype.constructor = C;
관련 글:
자 바스 크 립 트 를 이해 했다 고 생각 하 십 니까?
JavaScript 커 뮤 니 케 이 션 스티커 JavaScript 의 대상 (1)
JavaScript 의 if 제거
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.