처음에는 이것을 생각하는 것이 이상했습니다. 코드, 왜 실행할 수 없나요? 그래서 나는 저자의 이야기(이 코드에 대한 저자의 설명은 매우 복잡하고 여러 번 읽지 않으면 그가 말하는 내용을 이해할 수 없을 것입니다)를 기반으로 생각하기 시작했고 마침내 알아냈습니다.
우리는 var anObject = new aFunction() 형식으로 객체를 생성하는 과정이 실제로 3단계로 나눌 수 있다는 것을 이미 알고 있습니다.
(1) 새 객체 생성
(2) 객체의 내장 프로토타입 객체 생성자 포트타입이 참조하는 프로토타입 객체로 설정
(3) 멤버 설정 등 초기화 작업을 완료하려면 생성자를 this 매개변수로 호출합니다
단계( 2)
코드 복사
이 문장이 실행되면 oTriangle1.prototype = Triangle.prototype이 내부적으로 실행됩니다(물론 Triangle.prototype 객체 자체에는 이때 실제 속성 및 메서드) 이후 (3) ) 단계까지 계속 실행하고, 함수 본체를 실행한 뒤, 처음으로 함수 본체를 실행하여
코드 복사
하지만 이 문장이 실행된 후에는 oTriangle1.prototype에 더 이상 값을 할당할 수 없으며(즉, oTriangle1.prototype = Triangle을 실행할 수 없음) .prototype;) 프로그램은
코드 복사
코드는 다음과 같습니다.
하지만 지금은 너무 늦었습니다. oTriangle1.prototype 객체는 이 메소드를 소유하는 유일한 객체입니다. 방금 new Polygon()에 의해 생성되었으므로 프로그램의 마지막 주석 줄 결과가 있습니다. 하지만 다음에 생성된 Triangle 객체는 정상적으로 실행될 수 있습니다. 아래 코드를 보세요.
코드
코드 복사
코드는 다음과 같습니다.