괴짜, IE에서
나는 다음과 같은 코드 한을 오버라이드 (override)됩니다 스 니펫 A에서 y, B에서 y?IE에서
답변
스 니펫 A에서 x 및 y에 대해 this
키워드는 전역 개체를 참조하므로 값을 동일한 전역 변수 (window.id
)로 설정하면됩니다.
스 니펫 B에서는 new
연산자를 사용하고 있으며 함수는 생성자 함수로 실행되며 this
키워드는 새로 만든 개체를 참조합니다.
당신의 조각 A의 그 동작을 방지하려면 새 개체 인스턴스를 생성하고 this
대신 사용할 수 있습니다 : 그들은 전역 객체의 멤버이기 때문에 당신이 전역 함수를 호출
var x = (function(){
var instance = {};
instance.id = "Dog";
return instance;
}());
var y = (function(){
var instance = {};
instance.id = "Cat";
return instance;
}());
alert(x.id); //outputs Dog
alert(y.id); //outputs Cat
:
를window.globalFunction();
A :
globalFunction();
은 동일합니다 그 함수 내부의 컨텍스트는 전역 객체 자체 (window
)가됩니다.
둘 사이의 차이는 단편 A는 아니지만 발췌문 B는 상기 new
키워드 호 붙임하여 constructor function을 사용하고 있다는 것이다. 이것은 짧은 대답입니다.
긴 대답은하지그것은 this
변수 단순히 글로벌 window
객체를 가리키는 것 생성자 컨텍스트에서 사용하기 때문에 조각 A는 각 익명 함수 호출에 새로운 범위를 도입하더라도 있다는 것입니다. 따라서 스 니펫 A는 다음과 같습니다.
var x = (function(){ window.id="Dog"; return window; }());
var y = (function(){ window.id="Cat"; return window; }());
따라서 각 호출은 동일한 [전역] 변수를 마비시킵니다.
스 니펫 B는 new
키워드를 사용하므로 생성자 함수를 정의하고 즉시 호출합니다. JavaScript는 생성자 함수 내에서 this
변수를 초기화하여 [정의 된] 익명 함수의 새 인스턴스를 가리 킵니다.
얼마 전에 코드 블록을 정의하고 즉시 실행하는 가장 좋은 방법은 new function(){}
관용구를 보았을 것입니다. 글쎄, 자바 스크립트 객체 인스턴스 생성의 오버 헤드가있다. (더 이상 널리 사용되지 않는다.
- 1. IE에서
- 2. IE에서
- 3. IE에서 디버깅
- 4. IE에서 창 속성 삭제
- 5. IE에서 이미지가 깜박임
- 6. IE에서 이미지 크기 조정
- 7. IE에서 사라지는 div
- 8. IE에서 drag'n'drop과 관련된 문제
- 9. IE에서 sIFR 문제 document.defaultView.getComputedStyle
- 10. zindex가 IE에서 작동하지 않습니다
- 11. IE에서 'a'href 내의 JavaScript
- 12. IE에서 Ajax 문제
- 13. IE에서 유효성 검사 문제
- 14. IE에서 AJAX 권한이 거부되었습니다.
- 15. 관찰자가 IE에서 작동하지 않습니다
- 16. IE에서 텍스트 영역 문제
- 17. IE에서 작동하지 않는
- 18. IE에서 이미지가 렌더링되지 않습니다.
- 19. IE에서 중첩 테이블을 정렬
- 20. IE에서 매우 jQuery가 느림
- 21. IE에서 eval 문제
- 22. IE에서 천천히 jQuery 애니메이션
- 23. JQuery - IE에서 작동하지 않습니다.
- 24. IE에서 keypress (jquery에서) 문제
- 25. IE에서 각도 DIV
- 26. IE에서 Jquery 문제가 발생했습니다.
- 27. IE에서 JavaScript DOM
- 28. IE에서 Word 문서 열기
- 29. IE에서 레일 라우팅이 불안해졌습니다
- 30. IE에서 javascript 오류
+1 좋은 답변 –