javascript - 인스턴스 속성을 수정하면 수정 전 콘솔에 출력되는 콘텐츠에도 영향을 미치나요?
过去多啦不再A梦
过去多啦不再A梦 2017-05-19 10:35:27
0
3
523

프로토타입의 역학 문제가 아니라 콘솔 문제입니다
내 코드를 먼저 붙여넣으세요

으아악

주석은 정상적인 작업의 결과이지만 브라우저(Firefox 및 Chrome)에서 열면 콘솔은 3개의 동일한 배열을 반환합니다.

그리고

페이지를 새로 고치려면 클릭하면 정상적인 결과가 반환됩니다.
또는 console.log改为alert페이지를 열면 정상적인 결과가 반환됩니다.
IE는 매번 스크립트를 수동으로 로드해야 하므로 결과는 다음과 같습니다.
그래서 콘솔에서 결과가 출력되는 방식이 제가 생각하는 것과 다르다고 생각하시나요? 답변을 요청하세요.

过去多啦不再A梦
过去多啦不再A梦

모든 응답(3)
洪涛

저도 그런 문제에 직면했는데, 제가 제기한 질문은 다음과 같습니다:
/q/10...

읽고 싶지 않다면 일반적으로 console.log에는 지연 평가 문제가 있습니다!

결론부터 말씀드리자면, console.log는 표준에 의해 결정되는 API가 아니기 때문에 신뢰할 수 없으며, 브라우저 구현에 대한 표준도 없습니다. 때때로 동기식 console.log와 비동기식 console.log 사이에 혼동이 있을 뿐만 아니라 즉시 평가하는 console.log와 느리게 평가하는 console.log 사이의 차이점도 있습니다. 당신이 만나는 것은 후자입니다.

추가 참조: http://stackoverflow.com/ques...

Peter_Zhu

알겠습니다. 이미 질문에 프로토타입 문제가 아니라 콘솔 문제라고 명시되어 있습니다. 단어를 너무 많이 입력하고 나니 그래도 뭔가 가치가 있는 것 같아서 삭제하기가 꺼려지네요...
다음 설명은 질문자가 알고자 하는 내용과 일치하지 않습니다.
내 대답은 다음과 같습니다. 인스턴스 개체의 속성 변경이 다른 인스턴스에 영향을 미치는 이유는 무엇입니까?
Quan은 프로토타입 상속을 명확하게 이해하지 못하는 사람들에게 설명을 제공해야 합니다.

My Chrome(Mac 플랫폼, 버전 57.0.2987)에는 언급한 문제가 없으며 출력 결과는 예상과 일치합니다.

  • 첫 번째 출력: ["red", "green", "blue"]

  • 두 번째 출력: ["red", "green", "blue", "black"]

  • 세 번째 출력: ["red", "green", "blue", "black"]

질문에 답하기 전에, 발생한 문제를 설명하는 예를 살펴보세요.

으아악

이유

좋아요, 이제 질문으로 돌아갑니다. child1 인스턴스의 속성을 변경하면 child2에 영향을 미치는 이유는 무엇입니까?

  1. 인스턴스를 생성한 후 인스턴스의 __proto__ 속성은 상위 클래스의 .prototype 속성을 가리킵니다. 이는 복사본이 아니라 포인터(참조)입니다.

  2. 인스턴스 속성에 액세스할 때 먼저 인스턴스 자체를 검색하세요. 찾을 수 없으면 __proto__ 속성을 통해 상위 클래스의 프로토타입 속성으로 이동하여 다음을 찾으세요. child1.colors는 Father.prototype.colors를 가리키므로 색상에 대한 작업이 수행됩니다. 상위 클래스의 참조 객체에 직접적인 영향을 미칩니다.

  3. child2.colors도 Father.prototype.colors를 찾을 것이며 결과는 자연스럽게 child1이 색상을 수정한 후의 결과가 될 것입니다.

어떻게 피하나요?

child1.colors를 직접 조작하지 않고 재배정하시면 문제가 없습니다. (부모 클래스의 참조 유형 속성을 직접 조작하지 마십시오!)

으아악
滿天的星座

직접 답변하세요:
허용된 답변에서 알 수 있듯이 이는 console.log의 지연 평가 문제입니다. console.log的惰性求值问题;
当输出的内容为引用类型中的ArrayObject时,很有可能会出现问题中的情况;

目前我看到的最佳解决方法是:
将输出的内容改为console.log(JSON.stringify(yourArray))
不会改变输出的类型和内容,却规避了console.log출력 콘텐츠가 Array 또는 인 경우; 참조 유형 >객체, 질문에 나온 상황이 발생할 가능성이 높습니다.

지금까지 본 최고의 솔루션은 다음과 같습니다.

출력 콘텐츠를 console.log(JSON.stringify(yourArray))로 변경합니다. 🎜출력 유형과 콘텐츠는 변경되지 않지만 고정은 방지됩니다. console.log의 지연 평가 문제;🎜 🎜마지막으로 답변해주신 모든 분들께 감사드립니다! 🎜
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿