인터뷰 JS - 새로운 연산자의 기능을 실현하기 위해 필기 코드

우리는 어떤 무엇을 할 결국 새로운 운영자 파악해야?

새로운 객체를 생성 1

2. 생성자의 범위 (새로운 개체에 따라서이 점)가 새로운 객체를 할당

코드 생성자를 실행합니다 (새 개체의 속성을 추가)

새로운 오브젝트를 돌려줍니다 (4)

결국 새로운 운영자가 어떤 일을 할 수있는 위의 쇼, 우리는 새로운 운영자의 기능을 달성 할 수없는,이를 달성하기 위해 단계별로.

다음과 같은 사람은 먼저 생성자를 정의

함수 인 (명) {
      .name을 = 이름; 
} 
Person.prototype.sayName = 함수 () { 
    CONSOLE.LOG ( .name을); 
}

다음과 같이 새로운 시뮬레이션 함수 연산자 함수를 작성 :

함수 는 Person (명) {
     이 본 .name을 = 이름; 
} 
Person.prototype.sayName = 함수 () { 
    CONSOLE.LOG ( 이 본 .name을) 
} 

함수 createPerson는 () {
     // . (1)는 새로운 객체 생성 
    var에 O를 = { }
     // 2 범위 바인딩 달성하기 위해 생성자를 취득 
    VAR의 _constructor = [] .shift.call (인수)
     // . (3)으로 인해 액세스 내부 새로운 객체 인스턴스의 특성의 조작에 의해 생성된다 [프로토] (__proto__ 일부 브라우저) 
    // 프로토 타입 객체 생성자 포인트, 수동으로 바인딩이를 달성하기 위해. 
    .__ proto__ = O _constructor.prototype;
     // 바인딩 4.이 변경 지점의 범위를 적용
_constructor.apply (O 인자); 반환 O를; } VAR PERSON1 = createPerson (사람, 'YDB' ); person1.sayName ();

이 방법은 new 연산자의 기능을 실현된다.

사실, 위의 코드는 다음과 같이 쓸 수있다 :

함수 는 Person (명) {
     이 본 .name을 = 이름; 
} 
Person.prototype.sayName = 함수 () { 
    CONSOLE.LOG ( 이 본 .name을) 
} 

함수 createPerson는 () {
     // . 1 범위를 달성하기 위해 생성자를 취득 결합 
    VAR의 _constructor은 = [] .shift.call (인수)
     // 2 객체 생성 
    var에 O를 = Object.create (_constructor.prototype)
     // 객체 인스턴스 액세스 내부 속성은 새로운 오퍼레이터에 의해 생성되기 때문에 [프로토 타입]] (__proto__ 일부 브라우저) 
    // 프로토 타입 객체의 생성자에 포인트. 
    // Object.create () 메소드는 새로 생성 된 객체를 제공하는 __proto__ 기존의 객체를 사용하여, 새로운 객체를 생성한다. //4. 바인딩 범위 
    _constructor.apply (O 인수)
     리턴 O; 
} 
VAR PERSON1 = createPerson (인격 'YDB' ) 
person1.sayName ();

다음과 같이 프로퍼티가 Object.create을 가진 개체를 만들 수 있습니다 :

VAR의 O = Object.create (NULL);

 

추천

출처www.cnblogs.com/jsydb/p/12240426.html