우리는 어떤 무엇을 할 결국 새로운 운영자 파악해야?
새로운 객체를 생성 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);