1. 지식 보호 구역 :
1. 속성 이름을 열거하는 기능 :
(1)의 경우 : in : 루프 본체의 객체 (자체 속성 및 상속 특성 포함)의 모든 열거 가능한 속성을 가로 질러 갈 수 있습니다.
(2) Object.keys () : 배열을 반환합니다 (열거 가능한 속성)
(3) Object.getOwpropertyNames () : 모든 자체 속성
3. 속성의 속성 : 데이터 속성 및 액세서 속성
(1) 데이터 속성 : 쓰기 가능한 열거 가능한 구성 가능 값
데이터 속성에는 단 하나의 간단한 값이 있습니다.
(2) 액세서리 속성 : 쓰기 (세트), 읽기 (get), 열거 가능, 구성 가능
액세서 속성은 쓸 수 없습니다 (즉, 쓰기 가능한 기능은 없습니다).
속성에 설정 메소드가 있으면이 속성이 쓸 수 있고 get 메소드가 있으면이 속성을 읽을 수 있습니다.
4. 속성 속성을 정의하는 메소드 : Object.DefineProperty (Object, Attribute, Descriptor Object)
5. 속성의 설명 자 개체 가져 오기 : Object.GetOwnPropertyDescriptor (Object, Property)
2. 예
1. for ... in의 사용에 따르면, 우리는 "상속"을 시뮬레이션하는 방법을 쓸 수 있습니다.
<script type = "text/javaScript"> var child = {}; var mother = {이름 : "Zhangzhiying", Lastage : 21, 섹스 : "여성"}; 함수 확장 (target, source) {for (var p in source) {target [p] = source [p]; } 반환 대상; } Extend (어린이, 어머니); Console.log (자식); // <strong> 개체 {이름 : "Zhangzhiying", Lastage : 21, 섹스 : "여성"} </strong> </script>2. 프로토 타입 객체의 속성을 통해 반복을 사용하여 빈 객체에 값을 하나씩 할당하여 "상속"을 실현하십시오. 이 아이디어는 매우 정확합니다. 위의 예를 수정하겠습니다.
<script type = "text/javaScript"> var child = {}; var mother = {이름 : "Zhangzhiying", Lastage : 21, <strong> 세트 연령 (value) {this.lastage = value; }, get age () {return this.lastage+1; }, </strong> sex : "female"}; <br> <strong> mother.age = 15; </strong> // 쓸 수있는 함수 확장 (target, source) {for (var p in source) {target [p] = source [p]; } 반환 대상; } Extend (어린이, 어머니); Console.log (자식); // <strong> 개체 {이름 : "Zhangzhiying", Lastage : 15, 나이 : 16, 섹스 : "여성"} </strong> </script>코드에 한 쌍의 세트가 사용되는 것을 볼 수 있습니다. 나이가 액세서 속성 인 곳.
실행 결과 : 세트가 포함되지 않은 일반 객체, Get.
결론 : FOR IN이 구현 한 "상속"은 세트를 처리하지 않고 GET을 처리하지 않으며 액세서 속성 (AGE)을 정적 데이터 속성으로 변환합니다.
3. 어머니 객체에 대한 데이터 속성을 설정하십시오
<script type = "text/javaScript"> var child = {}; var mother = {이름 : "Zhangzhiying", Lastage : 21, set age (value) {this.lastage = value; }, get age () {return this.lastage+1; }, 섹스 : "여성"}; Object.DefineProperty (어머니, "마지막지", {writable : false}); // 문자가되지 않도록 Lastage를 작성하십시오. // 최후의 값은 변하지 않기 때문에 유효하지 않으며, 마지막+1은 변경되지 않은 상태로 남아 있습니다. } 반환 대상; } Extend (어린이, 어머니); Console.log (자식); // Object {이름 : "Zhangzhiying", Lastage : 21, 나이 : 22, 섹스 : "여성"} child.lastage = 12; // 결과는 Lastage가 변경되었음을 보여줍니다. getOwnPropertyDesRiptor () 메소드를 사용하여 <br> console.log (Object.geto를 확인하십시오<em id = __ mcedel> </script> </em>
결론 : 상속을 달성하기 위해서는 여전히 문제를 해결해야합니다 -> "상속"속성 특성.
4. 완전한 버전
<script type = "text/javaScript"> var child = {}; var mother = {이름 : "Zhangzhiying", Lastage : 21, set age (value) {this.lastage = value; }, get age () {return this.lastage+1; }, 섹스 : "여성"}; Object.DefineProperty (어머니, "마지막지", {writable : false}); Mother.age = 15; <span style = "color : #333399"> <strong> 함수 확장 (target, source) {var names = object.getownPropertyNames (source); // (var i = 0; i <names.length; i ++)의 모든 속성 이름을 가져옵니다. {if (target의 이름 [i]) 계속; //이 속성이 존재하는 경우 (프로토 타입 상속에서, 자체 속성의 속성과 프로토 타입 객체의 속성이 중복되는 경우) var desc = object.getOwnPropertyDescriptor (source, names [i]); // 마더 속성의 설명자 객체를 가져옵니다 (즉, ES5의 디스크립터 개체로 표시되는 속성 특성 세트) 객체 .defineProperty (대상, 이름 [i], desc); // 어머니의 디스크립터 개체를 자녀의 속성 정의로 가져옵니다} return target; } </strong> </span> Extend (Child, Mother); Console.log (자식); child.lastage = 12; Console.log (Object.GetOwnPropertyDescriptor (Child, "Lastage")); Console.log (자식); </스크립트>최종 결과 :
인쇄가 세 번, 어린이를 "상속"으로 설정하고 얻기 위해 명확하게 볼 수 있으며, 마지막 값은 변경되지 않았으며, 쓰기 가능도 거짓입니다.
요약 : 최근에 "JavaScript에 대한 권위 가이드"를 읽고 있습니다. 나는 몇 가지 경험을 요약 할 것입니다. 실수가 있으면 저를 수정하고 함께 배우고 함께 진행하십시오 ~
기능을 사용한 JavaScript 상속에 대한 위의 자세한 설명은 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.