javascript prototype,executing,context,closure

자 바스 크 립 트 를 잘 배 우려 면 몇 가지 기본 개념 이 있어 야 한다.prototype,executing,context,closure.Prototype 은 JavaScript 언어 에서 일반적으로 Prototype 을 사용 하여 OO 를 실현 합 니 다.여기 서 우 리 는 자 바스 크 립 트 의 OO 실현 에 대해 지나치게 많은 연 구 를 하지 않 고 JS 에서 대상 의 메모리 모델 을 중점적으로 살 펴 보 았 다.시작 하기 전에 다음 과 같은 몇 가 지 를 명 확 히 해 야 한다.1.JS 에는 다음 과 같은 몇 가지 데이터 형식 이 존재 한다.string,number,boolean,object,function(주의:이니셜 은 모두 소문 자).2"Object","String","Date"등 내 장 된 데이터 형식 으로 JS 에 서 는 사실상 함수 이름("alert(typeof Object)"을 사용 하여 검증 할 수 있 으 며"function"으로 출력)입 니 다.우리 가 일반적으로 가리 키 는 유형 은'Date'의 데이터 형식 으로 실제로는'new Date'를 통 해 발생 하 는 대상 이다.3.JavaScript 에서 대상 은 모두 associative array(hash table)로 대상 의 property 를 동적 으로 지정 할 수 있 습 니 다.4.Firefox 에서""사용 가능proto__"속성 은 대상 의"prototype"을 볼 수 있 습 니 다.다음은 간단 한 예 를 들 어 function Person(){this.age=10;this.name = "test";}Person.prototype = new Object;var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output"[object Object]"를 보면 Person 데이터 형식 이 하나의"prototype"을 가지 고 있 음 을 알 수 있 습 니 다.이 prototype 을 변경 하면 이미 발생 한 Person 형식의 모든 대상 에 영향 을 주 고 앞으로 만들어 질 Person 형식의 대상 에 도 영향 을 줄 수 있 습 니 다.function 의 prototype 속성 을 지정 하면 이 function 을 사용 하여 생 성 된 모든 대상 인 스 턴 스(new 연산 자 사용)에 이 prototype 이 있 습 니 다.Firefox 에 서 는""을 사용 할 수 있 습 니 다.proto__"속성 접근.일반적으로 JS 의 대상 이 Object 데이터 형식 을 계승 하 는 것 을 말 하 는데 이것 은 어떻게 나타 내 는 것 입 니까?우 리 는 위의 프로그램 을 약간 수정 합 니 다:function Person(){this.age=10;this.name = "test";}var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output "[object Object]"alert(p.__proto__.__proto__); // output "[object Object]"alert(p.__proto__.__proto__ == Object.prototype); // output "true"alert(p.__proto__.__proto__.__proto__); // output"null"은 상기 프로그램 에서 볼 수 있 습 니 다.Person 의"prototype"(여기 서 Person.prototype 을 명확 하 게 지정 하지 않 고 결 성 된 값 을 사용 합 니 다)의"prototype"(p.proto__.__proto__)바로 Object.prototype 입 니 다.Object.prototype 은 prototype chain 의 종점 입 니 다.JS 에서 Object 는 function 이 고 모든 function 의 인 스 턴 스 도 Object 입 니 다.다음 프로그램 을 보십시오:/*Object,Function 은 모두 function 데이터 형식*/alert(typeof Object);/output "function"alert(typeof Function); // output"function"/*Function 의 prototype 은 빈 function*/alert(Function.prototype)입 니 다.//output "function() {}"alert(Function.__proto__ == Function.prototype); // output"true"/*function 은 object 이 고,prototype chain 의 종점 은 Object.prototype*/alert(Function.proto__.__proto__ == Object.prototype); //output"true"/*Object 는 function 의 인 스 턴 스*/alert(Object.proto__ == Function.prototype); // output "true"alert(Object.__proto__.__proto__ == Object.prototype); // output"true"는 Function.prototype 을 바 꾸 면"Object"에 영향 을 주 고 Object.prototype 을 바 꾸 면 모든 function 의 인 스 턴 스 에 영향 을 줄 수 있 습 니 다.

좋은 웹페이지 즐겨찾기