<cript> function p () {var len = arguments.length; for (var i = 0; i <len; i ++) {document.write (arguments [i]+"<br/>"); }} 함수 myClass (x, y) {this.x = x; this.y = y; this.show = function () {return this.x+this.y; }} var m1 = new myclass (1,2); var m2 = new myclass (3,4); p (m1.show (), m2.show ()); </script>기존 문제
1. 동일한 방법으로 정의 된 모든 인스턴스 복사 엔티티이므로 프로토 타입 상속을 통해 효율성 (메모리 효율 및 비효율적 인 실행)을 해결할 수 있습니다.
2. 속성 값 (개인, 공개)의 제어에 액세스 할 수 없음 폐쇄를 통해 해결할 수 있습니다.
속성에 의해 액세스 된 조작 객체는 변수가 아니라 객체에 대한 참조입니다.
숫자 값의 정수 부분 만 읽기
수학 [this <0? 'celling': 'floor'] (this);
연관 배열
JS에서는 객체를 전달하여 연관 배열을 구현해야합니다.
기본 작업은 키, 요소 설정 및 요소 삭제에 의해 이루어집니다.
<cript> var map = {x : 3, y : 4}; p (map.x); map.x 삭제; //truep(map.x); // 정의되지 않은 요소에 액세스 한 결과는 정의되지 않았습니다. 값이 정의되지 않은 것으로 설정 될 수 있으므로 값을 정의되지 않은 것과 비교하여 값이 존재하는지 판단하는 것은 불가능합니다. a = 'undefined'; p (a); // undefinedp (typeof map.x == a)에서 열거 할 수 있습니다. // true </script>연관 배열로서주의를 기울여야합니다
<cript> 함수 myclass (x, y) {this.x = x; this.y = y;} myclass.prototype.z = 5; var obj = new myclass (1,2); for (var key in obj) {p (key+":"+obj [key]); // 프로토 타입을 통해 상속 된 속성은 열거됩니다} // x : 1 y : 2 z : 5delete obj.x; // truep (obj.x); //undefinedp(Obj.z); // 5 // 프로토 타입을 통해 상속 된 속성은 삭제 될 수 없습니다. 삭제 obj.z; //truep(Obj.z) ;//5// 객체를 연관 배열로 사용하면 리터럴이 일반적으로 생성됩니다. View가 빈 객체 문자를 사용하여 요소가없는 연관 배열을 생성하더라도 프로토 타입의 속성 P (OBJ의 'ToString'); // truevar obj1 = {}; p (obj1의 'tostring'); // true // enumenp (obj1.length); // undefinedfor (var k in obj1) {p (obj1 [k]);} // 요소가 열거되지 않습니다. 이것은 열거 가능한 속성 때문입니다 .//truevar obj1 = {}; p (obj1의 'tostring'); // prue // p의 enum 열거 (obj1.length); // undefinedfor (var k in obj1) {p (obj1 [k]);} // 요소가 열거되지 않습니다. 이것은 열거 가능한 속성 때문입니다 .//truevar obj1 = {}; p (obj1의 'toString'); // true // 프로토 타입 맵 = {}에 참여하여 상속 된 자체와 같은 속성 var (map.hasownproperty ( 'toString')); //falsemap] n'tostring' ]=1;p(map.hasownproperty('tostring ')); // truedelete map [ 'tostring']; p (map.hasownproperty ( 'tostring')); // false </script>속성
객체의 속성에는 일부 속성이 있습니다
다음 표는 ECMAScript의 다섯 번째 판에 정의 된 속성을 요약하고 속성 값은 값 속성으로 정의됩니다.
표 1
속성 이름 | 의미 |
쓰기 | 속성의 값을 다시 작성할 수 있습니다 |
열거 가능 | IN에 의해 열거 될 수 있습니다 |
구성 가능 | 속성을 변경하고 속성을 삭제할 수 있습니다 |
얻다 | 속성 값을 지정하는 getter 기능 |
세트 | 속성 값을 지정할 수있는 세터 함수 |
불변의 대상
즉, 생성 후 상태를 변경할 수없는 객체와 문자열 객체는 전형적인 불변의 객체입니다.
불변의 객체를 유연하게 사용하면 프로그램 매개 변수로 전달할 때 프로그램의 견고성을 향상시킬 수 있으며 객체 내용을 다시 작성하는 방법이 있습니다.
불변의 개체는 JS에서 구현할 수 있습니다
1. 속성을 숨기고 (상태 숨겨진) 변경 작업을 제공하지 마십시오 (폐쇄 구현).
2. 5 판에서 ECMAScript가 제공 한 기능의 유연한 사용
3. 쓰기 가능, 구성 가능한 속성, 세터 및 게터의 유연한 사용
ECMAScript 버전 5에서 불변의 개체를 지원하는 데 사용되는 기능은 다음 표에 나와 있습니다.
메소드 이름 | 새로운 속성 | 속성 삭제 | 속성 값의 변경 | 확인 방법 |
예방 xtensions | 엑스 | 영형 | 영형 | object.isextensible |
밀봉하다 | 엑스 | 엑스 | 영형 | Object.issealed |
꼭 매달리게 하다 | 엑스 | 엑스 | 엑스 | Object.isfrozen |
object.preventextensions 예제
<cript> var obj = {x : 2, y : 3}; object.preventextensions (obj); // 속성 obj.z = 4; p (object.keys (obj)); // x, y // 속성을 추가 할 수 없습니다. // x // 속성 값 obj.x = 20; p (obj.x)를 추가 할 수 없습니다. //20//object.seal 예제는 속성의 구성 가능한 구성을 false var var obj = {x : 2, y : 3}로 설정합니다. object.seal (obj); // obj.z = 3; p (object.keys (obj))를 추가하거나 삭제할 수 없습니다. // x, ydelete obj.x; //falsep(Object.keys(Obj)) ;//x,Y//can 속성 값 변경 OBJ.X = 20; P (OBJ.X); // 20 // object.freeze 예제 False var obj = {x : 2, y : 3}; object.freeze (//); obj.z = 3; p (object.keys (obj)); // x, y // 속성 값 obj.x = 20; p (obj.x); // 20 </script>를 변경할 수 있습니다주의를 기울여야합니다
1. 위의 세 가지 방법의 경우 변경되면 복원 할 수 없습니다.
2. 프로토 타입 상속에서 상속 된 방법을 변경하지 않으려면 표시해야합니다.