JavaScript: 새 함수와 함수를 직접 호출하는 것의 유사점과 차이점

高洛峰
풀어 주다: 2016-11-25 14:29:35
원래의
992명이 탐색했습니다.

아마도 많은 사람들이 이에 동의하지 않을 것입니다. 함수 앞에 new 키워드를 추가한다는 것은 객체를 인스턴스화한다는 뜻이겠죠? 하지만 상황은 그다지 간단하지 않습니다.


function Test() {
This.name = 'Test'
return function() { return true; 🎜 >
var test = new Test(); // 여기서 테스트란 무엇인가요?
테스트 대상인가요? 잘못된! 여기서 test는 Test에서 반환된 function() { return true }입니다. 이때 new Test()는 Test()와 동일합니다. new Test() == Test()를 사용하여 둘이 동일한지 확인하면 false가 반환됩니다. , 함수와 객체 비교를 위한 Javascript는 참조를 기반으로 하기 때문입니다.

위 상황에서 둘의 차이점을 보다 명확하게 구분하기 위해 계속해서 다음 코드를 살펴보시기 바랍니다.

function Test() {

 this.name = ' 테스트';

return '테스트'; 하하, 첫 번째 예시 때문에 헷갈리셨나요? 실제로 newT는 현재 Test 개체입니다. 값이 Test 문자열인 name이라는 속성이 있습니다.

위의 두 코드를 통해 추측할 수 있습니다. 함수 반환 값이 일반적인 값 유형(Number, String, Boolean)인 경우 새 함수는 함수의 인스턴스 개체를 반환합니다. , 함수가 참조 유형(Object, Array, Function)을 반환하는 경우 새 함수는 함수를 직접 호출한 결과와 동일합니다. 이는 Test 함수에서 다양한 유형의 값을 반환하여 테스트함으로써 확인할 수 있습니다. ​

실제로 이 점을 구별하는 것이 매우 중요합니다. 적어도 일부 객체 지향 프레임워크 클래스 라이브러리 코드를 볼 때 혼란이 덜할 것입니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿