JavaScript 에서 new 연산 자의 원리 예제 상세 설명

2138 단어 jsnew조작 부호
새로운 용도
new 의 역할 은 구조 함 수 를 통 해 인 스 턴 스 대상 을 만 드 는 것 입 니 다.이 인 스 턴 스 와 원형 과 구조 함수 간 의 관 계 는 다음 그림 과 같 습 니 다.

일단 정 리 를 해 보도 록 하 겠 습 니 다.
  • 빈 대상 만 들 기
  • 빈 대상 의 내부 속성proto__ 구조 함수 로 대 입 된 prototype 속성
  • 구조 함수 의 this 를 빈 대상 으로 가리 키 기
  • 구조 함수 내부 코드 실행
  • 이 새 대상 에 게 돌아 가기
  • 자세하게 설명 하 다
    new 작업 을 수행 할 때 다음 절 차 를 거 칩 니 다:
    1.빈 대상 만 들 기
  • 빈 대상 은 Object 의 인 스 턴 스,즉{}입 니 다.
  • 
    let obj = {}
    
    2,빈 대상 의 내부 속성proto__ 구조 함수 의 prototype 속성 을 할당 합 니 다.
  • 이 조작 은 빈 대상 을 정확 한 원형 에 연결 하기 위 한 것 이다
  • 
    function Foo(num) {
      this.number = num
    }
    
    obj.__proto__ = Foo.prototype
    
    3.구조 함수 의 this 를 빈 대상 으로 가리 키 기
  • 즉 구조 함수 내부 의 this 는 빈 대상 으로 할당 되 어 구조 함 수 를 정확하게 수행 할 수 있 도록 합 니 다.
  • 
    Foo.call(obj, 1)
    
    4.구조 함수 내부 코드 실행
  • 빈 대상 에 게 속성,방법 을 추가 합 니 다.
  • 5.이 새 대상 에 게 돌아 가기
  • 구조 함수 내부 에서 return 문 구 를 통 해 인용 유형 값 을 되 돌려 주면 new 작업 은 최종 적 으로 이 인용 유형 값 을 되 돌려 줍 니 다.그렇지 않 으 면 새로 만 든 대상 을 되 돌려 줍 니 다.
  • 참조 형식 값:기본 형식 값(수치,문자열,불 값,null,undefined,Symbol 값)을 제외 한 모든 값 입 니 다.
  • 아 날로 그 new 연산 자
    아래 my New 함수 가 new 연산 자의 행동 을 모 의 했 습 니 다.
    
    function myNew(func, ...args) {
      let obj = {}
      obj.__proto__ = func.prototype
      let res = func.apply(obj, args)
      return res instanceof Object ? res : obj
    }
    
    function Foo(num) {
      this.number = num
    }
    
    let foo1 = myNew(Foo, 1)
    console.log(foo1 instanceof Foo)  // true
    console.log(foo1.number)  // 1
    
    let foo2 = new Foo(2)
    console.log(foo2 instanceof Foo)  // true
    console.log(foo2.number)  // 2
    
    위 에 서 는 instanceof 연산 자 를 통 해 구조 함수 의 반환 값 이 Object 의 인 스 턴 스 인지,즉 참조 형식 값 인지 여 부 를 판단 합 니 다.모든 참조 형식 값 은 Object 의 인 스 턴 스 이 고 Object 는 모든 참조 형식 값 의 기본 형식 이기 때 문 입 니 다.
    자,자 바스 크 립 트 의 new 연산 자 원리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JS new 연산 자 원리 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기