JavaScript 객체의 흥미로운 특성
프로그래밍의 깊이에서 JavaScript의 세계는 예상치 못한 반전을 선사합니다. 모든 것이 객체는 아닙니다. . 많은 소개 텍스트에서 "거의 모든 것"이 이 분류에 속한다고 암시하지만 자세히 살펴보면 다른 진실이 드러납니다.
기본적으로 객체는 메서드와 속성을 통해 기능을 캡슐화합니다. 예를 들어 배열은 고유한 키-값 쌍으로 이 틀에 맞습니다. 그러나 "문자열", "숫자" 및 "함수"의 경우 경계가 흐려집니다.
이러한 엔터티는 속성이나 명백한 액세스 없이 입력에 대해 변환을 수행하고 출력을 생성하는 함수와 유사해 보일 수 있습니다. 행동 양식. 그러한 경우에는 점 표기법이 눈에 띄게 부재합니다.
래퍼 수수께끼
미스터리를 풀면서 우리는 미묘한 차이를 발견합니다. 사물의 진정한 본질. 대신 문자열, 숫자 및 부울이라는 개체 의류로 포장됩니다. 이러한 래퍼에는 메소드와 속성이 있어 객체 동작의 환상을 부여합니다.
예를 들어 다음 코드를 고려하세요.
var s = "foo"; var sub = s.substring(1, 2); // sub becomes "o"
배후에서 JavaScript는 일련의 숨겨진 단계를 수행합니다.
속성의 환상
그 동안 기본 요소에 속성이 할당될 수 있는 것으로 나타납니다. 이러한 시도는 다음 예에서 알 수 있듯이 소용이 없습니다.
var s = "foo"; s.bar = "cheese"; alert(s.bar); // undefined
이는 해당 속성이 즉시 삭제되는 임시 문자열 래퍼 개체에 정의되어 있기 때문에 발생합니다. 속성에 액세스할 수 없습니다.
함수: 변장한 개체
프리미티브와 달리 함수는 개체에서 상속되는 완전한 기능을 갖춘 개체입니다. 이는 그들이 자신의 속성을 갖는 능력을 포함하여 객체의 모든 능력을 소유하고 있음을 의미합니다. 다음 예를 확인하세요.
function foo() {} foo.bar = "tea"; alert(foo.bar); // tea
결론
JavaScript에서 모든 것이 객체의 역할을 하는 것은 아닙니다. 객체 래퍼로 위장한 프리미티브는 객체 동작의 환상을 만듭니다. JavaScript의 복잡성에 대한 더 깊은 이해를 통해서만 개체의 진정한 본질이 분명해집니다.
위 내용은 JavaScript 프리미티브는 정말 객체인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!