new 가 실례 화 할 수 없 는 구조 함 수 를 만 드 는 방법
1712 단어 웹 전단
일반적으로 구조 함 수 를 실례 화 할 때, 안의 this 는 실례 화 된 실례 를 가리킨다.다음 예제 에서 보 듯 이:
function Ins(){
this.a = 1;//this ins
this.b = 2;
}
var ins = new Ins();
그러나 때때로 우 리 는 new 가 아 닌 함 수 를 직접 실행 하여 실례 화 하려 고 한다.이 럴 때 구조 함수 안의 this 지향 은 더 이상 실례 화 된 실례 가 아니 라 Ins 함수 의 수용자 전역 변수 window 가 되 고 엄격 한 모드 에서 오 류 를 직접 던 집 니 다.
일반적인 해결 방안 은 this 가 구조 함수 의 인 스 턴 스 인지 판단 하 는 것 입 니 다. 그렇지 않 으 면 new 작업 을 합 니 다.코드 는 다음 과 같 습 니 다:
function Ins(a,b){
if(!this instanceof Ins){
return new Ins(a,b);
}
this.a = a;
this.b = b;
}
구조 함수 매개 변수 개수 가 고정된 상황 에서 이런 방안 은 실행 가능 하 다.이런 방식 의 단점 중 하 나 는 추가 함수 호출 이 필요 하기 때문에 대가 가 좀 높다 는 것 이다.
구조 함수 의 실례 화 를 진행 할 때 구조 함수 내부 에 return 문장 반환 값 이 명확 하지 않 으 면 이 구조 함 수 는 자동 으로 하나의 실례 대상 을 구성 하여 되 돌려 줍 니 다. 그러나 만약 에 우리 가 간단 하지 않 은 데이터 형식 (간단 한 데이터 형식 은 자동 적 으로 실례 대상 을 되 돌려 줍 니 다) 의 대상 을 명확 하 게 되 돌려 준다 면구조 함수 가 실례 화 될 때 돌아 오 는 것 이 바로 이 대상 이다.이렇게 하면 우 리 는 다음 과 같은 통용 상황 에서 의 구조 함 수 를 구성 할 수 있다.
function Ins(a,b){
var self = this instanceof Ins?this:Object.create(Ins.prototype);
self.a = a;
slef.b = b;
return self;
}
Object. create () 는 원형 대상 을 매개 변수 로 하고 이 원형 대상 을 계승 하 는 새로운 대상 을 되 돌려 야 합 니 다.Object. create () 함 수 는 ES5 환경 에서 만 유효 합 니 다. 일부 오래된 환경 에서 부분 적 인 구조 함 수 를 만 들 고 new 연산 자 를 사용 하여 이 구조 함 수 를 초기 화 하여 Object. create 를 대체 할 수 있 습 니 다.
if(typeof Object.create === "undefined"){
Object.create = function(prototype){
function F(){}
F.prototype = prototype;
return new F();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
js div 드래그 호 환 i / fireforx js 마우스 위치 깊이 분석이벤트 속성 은 이벤트 가 실 행 될 때 브 라 우 저 페이지 (클 라 이언 트) 에 대한 수직 좌 표를 되 돌려 줍 니 다. 이 두 속성 은 이벤트 가 실 행 될 때 마우스 포인터 가 브 라 우 저 페이지 (클 라...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.