JavaScript 프리미티브는 정말 객체인가요?

Barbara Streisand
풀어 주다: 2024-11-15 00:08:02
원래의
267명이 탐색했습니다.

Are JavaScript Primitives Truly Objects?

JavaScript 객체의 흥미로운 특성

프로그래밍의 깊이에서 JavaScript의 세계는 예상치 못한 반전을 선사합니다. 모든 것이 객체는 아닙니다. . 많은 소개 텍스트에서 "거의 모든 것"이 이 분류에 속한다고 암시하지만 자세히 살펴보면 다른 진실이 드러납니다.

기본적으로 객체는 메서드와 속성을 통해 기능을 캡슐화합니다. 예를 들어 배열은 고유한 키-값 쌍으로 이 틀에 맞습니다. 그러나 "문자열", "숫자" 및 "함수"의 경우 경계가 흐려집니다.

이러한 엔터티는 속성이나 명백한 액세스 없이 입력에 대해 변환을 수행하고 출력을 생성하는 함수와 유사해 보일 수 있습니다. 행동 양식. 그러한 경우에는 점 표기법이 눈에 띄게 부재합니다.

래퍼 수수께끼

미스터리를 풀면서 우리는 미묘한 차이를 발견합니다. 사물의 진정한 본질. 대신 문자열, 숫자 및 부울이라는 개체 의류로 포장됩니다. 이러한 래퍼에는 메소드와 속성이 있어 객체 ​​동작의 환상을 부여합니다.

예를 들어 다음 코드를 고려하세요.

var s = "foo";
var sub = s.substring(1, 2); // sub becomes "o"
로그인 후 복사

배후에서 JavaScript는 일련의 숨겨진 단계를 수행합니다.

  1. 새 문자열을 효과적으로 적용하여 s에 대한 문자열 래퍼 개체를 생성합니다.
  2. 지정된 매개변수를 사용하여 래퍼 개체에 대해 substring() 메서드를 실행합니다.
  3. 문자열 래퍼 객체를 삭제합니다.
  4. 2단계의 결과 문자열(기본)을 반환합니다.

속성의 환상

그 동안 기본 요소에 속성이 할당될 수 있는 것으로 나타납니다. 이러한 시도는 다음 예에서 알 수 있듯이 소용이 없습니다.

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined
로그인 후 복사

이는 해당 속성이 즉시 삭제되는 임시 문자열 래퍼 개체에 정의되어 있기 때문에 발생합니다. 속성에 액세스할 수 없습니다.

함수: 변장한 개체

프리미티브와 달리 함수는 개체에서 상속되는 완전한 기능을 갖춘 개체입니다. 이는 그들이 자신의 속성을 갖는 능력을 포함하여 객체의 모든 능력을 소유하고 있음을 의미합니다. 다음 예를 확인하세요.

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea
로그인 후 복사

결론

JavaScript에서 모든 것이 객체의 역할을 하는 것은 아닙니다. 객체 래퍼로 위장한 프리미티브는 객체 동작의 환상을 만듭니다. JavaScript의 복잡성에 대한 더 깊은 이해를 통해서만 개체의 진정한 본질이 분명해집니다.

위 내용은 JavaScript 프리미티브는 정말 객체인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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