javascript - js 범위 안전 생성자의 문제
phpcn_u1582
phpcn_u1582 2017-05-19 10:15:29
0
4
463
으아아아

이 코드는 JS Height 3의 P598-599의 예입니다. 제가 묻고 싶은 것은 경고가 정의되지 않은 이유는 무엇입니까?

phpcn_u1582
phpcn_u1582

모든 응답(4)
曾经蜡笔没有小新

시작

으아아아

직사각형을 입력하세요. 이는 새 개체를 가리키며 object1이라고 부릅니다.

실행

으아아아

object1 이름에 Polygon을 입력하세요

으아아아

object1의 프로토타입은 Rectangle이므로 else로 가세요

으아아아

Polygon을 다시 입력하세요. 이는 새 객체를 가리키며 object2라고 부릅니다.

object2의 프로토타입은 Polygon이므로 object2에는 sidesgetArea가 제공됩니다sidesgetArea

回到 object1 的地盘, Polygon.call(this,2); 返回 object2 ,然后…… 然后丢掉了。

var rect=new Rectangle(5,10);

接着赐予 object1 undefinedwidthheightgetArea

object1의 영역으로 돌아가서 Polygon.call(this,2);는 object2를 반환하고... 그 다음에는 손실됩니다.

으아아아

그런 다음 object1 정의되지 않음너비, 높이getArea를 부여합니다.

마지막으로 ret는 object1을 얻었습니다 🎜 🎜솔루션을 추가하고 Rectangle이 Polygon의 프로토타입을 공유하도록 하세요🎜 으아아아
淡淡烟草味

Rectangle에서 Polygon의 this는 Rectangle의 this를 가리킵니다. Rectangle이 생성자로 사용될 때 this는 Rectangle의 인스턴스, 즉 이 예에서는 ret를 나타내며 Polygon의 프로토타입은 의 프로토타입 체인에 없습니다. 즉, 이 Polygon 인스턴스는 false이므로 else의 반환 새 Polygon(sides)이 사용되며 측면은 인스턴스에 연결되지 않으므로 측면 속성이 각형 인스턴스에 존재하지 않습니다.
직사각형(폭,높이)도 있는데 너비가 잘못 적혀있습니다

習慣沉默

귀하의 예에서 다각형은 간섭 항목이며 직사각형에는 전혀 영향을 미치지 않습니다.

삭제 Polygon.call(this,2); 다시 보세요. 이유를 알 수 있나요

巴扎黑
  • 이것을 인쇄하면 이유를 알 수 있습니다

  • this.sides=sides가 다각형에 걸려있습니다

  • 새 다각형(측면)을 반환합니다.//호출 시 더 이상 직사각형이 아닙니다

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿