36 \ # 3 대상 깊이 - 구조 함수 와 new 명령
모든 대상 은 기능 중심 이 고 명확 한 분업 을 가 지 며 정 보 를 받 아들 이 고 데 이 터 를 처리 하 며 정 보 를 보 내 는 등 임 무 를 수행 할 수 있 습 니 다. 대상 을 대상 으로 프로 그래 밍 하 는 것 은 유연성, 코드 의 중용 성, 모듈 성 등 특징 을 가지 고 유지 하고 개발 하기 쉬 우 며 여러 사람 이 합작 하 는 대형 소프트웨어 프로젝트 에 매우 적합 합 니 다.
구조 함수 '대상 지향 프로 그래 밍' 의 첫 번 째 단 계 는 '대상' 자 바스 크 립 트 의 대상 체 계 를 생 성 하 는 것 입 니 다. 구조 함수 (constructor) 와 프로 토 타 입 체인 (prototype) 자 바스 크 립 트 의 대상 지향 프로 그래 밍 은 '프로 토 타 입 대상' 을 기반 으로 합 니 다.
구조 함수 의 서법 은 일반적인 함수 var Vehicle = function () {this. price = 1000;} 이다.위의 코드 에서 Vehicle 은 구조 함수 로 템 플 릿 을 제공 하여 대상 인 스 턴 스 를 생 성 합 니 다.
* , ( )
* this , ( )
new 명령 [new 구조 함수 반환 대상 인 스 턴 스; new 일반 함수 반환 {} new 인 스 턴 스 없 음] new 명령 의 역할 은 구조 함 수 를 실행 하고 인 스 턴 스 대상 var Vehicle = function () {this. price = 1000;} 을 되 돌려 주 는 것 입 니 다.
var v = new Vehicle(); v. price / / 1000 이 new 명령 을 사용 할 때 필요 에 따라 구조 함수 도 매개 변수 var Vehicle = function (p) {this. price = p;} 을 받 아들 일 수 있 습 니 다.
var v = new Vehicle(500); new 명령 자체 가 구조 함 수 를 실행 할 수 있 기 때문에 뒤의 구조 함 수 는 괄호 를 달 수도 있 고 괄호 var v = new Vehicle () 을 가지 지 않 아 도 된다.var v = new Vehicle; 다른 한편, 일반 함수 (내부 에 this 키워드 가 없 는 함수) 에 new 명령 을 사용 하면 빈 대상 function getMessage () {return 'this is a message' 를 되 돌려 줍 니 다.}
var msg = new getMessage();
msg / / {} typeof msg / / "Object" 는 또 다른 한편, new 명령 을 사용 하지 않 으 면 구조 함 수 는 일반 함수 로 취급 되 며 대상 인 스 턴 스 var Vehicle = function () {this. price = 1000; / this 는 Vehicle 함수 의 호출 자} 를 생 성하 지 않 습 니 다.
var v = Vehicle();// v. Vehicle 함수 의 반환 값 undefined 가 저 장 됩 니 다.
v.price// Uncaught TypeError: Cannot read property 'price' of undefined price// 1000
new 명령 의 원 리 는 new 명령 을 사용 할 때 그 뒤의 함수 호출 은 정상 적 인 호출 이 아니 라 다음 절 차 를 순서대로 실행 합 니 다.
1.
2. , prototype
3. this
4.
5. this--
즉, 구조 함수 내부 에서 this 는 새로 생 성 된 빈 대상 을 말 합 니 다. this 에 대한 모든 조작 은 이 빈 대상 에서 구조 함수 가 '구조 함수' 라 고 부 르 는 이 유 는 이 함수 의 목적 은 바로 빈 대상 (즉 this 이미지) 을 조작 하여 '구조' 를 필요 한 모습 으로 하 는 것 입 니 다.
구조 함수 에 return 이 있 는 경우 구조 함수 내부 에 return 문구 가 있 고 return 문 구 는 this 와 무관 한 새로운 대상 new 명령 을 되 돌려 주 는 것 입 니 다. 이 점 은 특히 주의해 야 합 니 다. 그 밖 에 return 문 구 를 관리 하지 않 고 this 대상 var Vehicle = function () {this. price = 1000; return {price: 2000};};new Vehicle () / / Object {price: 2000} var Vehicle = function () {this. price = 1000; return 1000;};new Vehicle () / / 생 성 대상 인 스 턴 스 를 되 돌려 줍 니 다.
new. target (알 아 보기) 모든 함수 내 부 는 new. target 속성 을 사용 할 수 있 습 니 다. 현재 함수 가 new 명령 호출 이 라면 new. target 은 현재 함 수 를 가리 키 고 그렇지 않 으 면 undefined 입 니 다.function f() { console.log(new.target === f); }
new f() // true f() // false
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.