그저께 한 네티즌이 저에게 '오브젝트가 뭐예요?'라고 묻는 메시지를 남겼습니다. 지난 이틀 동안 TreeView 컨트롤을 재구성하느라 바빴기 때문에 제때 응답하지 못한 점 정말 죄송합니다. 오늘 시간을 내어 JavaScript에서 객체가 정확히 무엇인지 살펴보세요. 객체와 함수의 관계는 무엇입니까? 제가 틀렸다면 정정을 환영합니다.
비공개 메시지이기는 하지만 익명으로 보내도 비난하지 마시길 바랍니다. 혹시 잘못된 점이 있으면 알려주세요.
js의 객체는 정확히 무엇입니까?
처음에는 Object가 js의 모든 객체의 프로토타입이라고 생각했습니다.
하지만: 경고(Object.constructor)는 함수 Function...을 표시합니다.
이는 Object의 프로토타입이 Function?
그런데 문제가 또 발생합니다.
Function.prototype.read=function(){};//확장 함수 프로토타입
for(var i in Object)alert(i)//읽은 내용을 표시하여 Object의 프로토타입이 Function
Object.prototype.read=function(){}임을 확인합니다.//Object의 프로토타입을 확장합니다.
for(var i in Function)alert(i)//읽기 표시, Function의 프로토타입은 Object입니까? ? ? ?
객체란 정확히 무엇인가요? 클래스로서의 Object와 Function은 같은 것입니까?
이 친구는 JavaScript가 객체 기반 언어이기 때문에 생성자, 프로토타입 및 함수를 혼동했습니다(JavaScript에는 적절한 클래스가 포함되어 있지 않습니다). 실제로 Object가 모든 객체의 프로토타입이라고 할 수 있지만 이는 Object.prototype이라는 JavaScript의 프로토타입 언어 기능이 아니라 디자인 패턴의 Prototype Pattern에 있는 프로토타입 개념을 의미합니다.
그렇다면 JavaScript에서 객체란 정확히 무엇입니까? Script56.chm(공식 M$ 튜토리얼)은 다음과 같이 말합니다: 모든 JScript 개체에 대한 공통 기능을 제공합니다. 글쎄, 이해하셨나요? 이해해야 하는데 아직도 이해가 안되는 것 같으니까 @_@. 데이터 구조를 살펴보면 객체(Object의 인스턴스)는 순서가 지정되지 않은 컬렉션으로, C++의 map, C#의 해시테이블, Java의 해시맵과 유사한 구조입니다. 그리고 여기에는 JavaScript 언어 시스템에서 할당한 기본 값이 포함되어 있습니다. 이는 무엇을 의미합니까? Object에는 valueOf라는 메서드가 있으며 해당 기능은 지정된 개체의 원래 값을 반환하는 것입니다. 이는 Script56에서도 찾을 수 있으며 시스템 개체의 valueOf 반환 결과를 나열하는 테이블도 있습니다. 즉, Array, Boolean, Date, Function, Number 등과 같은 객체는 실제로 모두 Object에서 나오며 그 조상도 모두 Object입니다. 예를 들어 Array에는 자동으로 관리되는 길이 속성이 있고, Boolean에는 true 또는 false 값만 있고, Date는 시간 구조를 나타내며, Function은 모두 원래 유형(valueOf)으로 제공되는 기능입니다. ). 객체는 실제로 개념일 뿐입니다. JavaScript 언어는 객체를 기반으로 하며, 이는 모든 내장 유형이 일련의 공통 메소드 및 속성(동작 및 상태라고도 함)에서 추상화됨을 의미합니다. 이러한 특성은 개체입니다. 사실, Object는 프로그래밍에 그다지 유용하지 않습니다. 우리 모두는 Object의 인스턴스 객체를 사용하고 있으며, Object의 컬렉션 기능(expando)을 사용하여 객체를 원하는 대로 확장하고 있습니다. Object.prototype의 경우 각 특정 유형마다 고유한 프로토타입이 있고 우리가 추가하는 대부분의 프로토타입 메서드는 특정 유형에 대한 것이기 때문에 실제로는 별로 유용하지 않습니다.
프로토타입 외에도 Object에는 매우 중요한 속성인 생성자가 있습니다. 이는 앞서 언급한 객체의 확장을 완료하는 데 사용되며 OOP를 시뮬레이션하기 위해 JavaScript를 사용하는 기초이기도 합니다. JavaScript의 모든 것이 Object이므로 생성자도 마찬가지이지만 원래 유형은 Function입니다(Object.constructor.valueOf()를 실행하여 다음을 얻습니다: function Function() { [네이티브 코드] }). 물론 반대로 모든 JavaScript 객체에 생성자 속성이 있는 것은 아니며 일부 내장 객체에는 생성자가 없습니다.
Object와 Function 사이의 관계에 관해서는 이것이 좋은 테스트 코드가 아니라고 생각합니다: Function.prototype.read=function(){};//Extended Function 프로토타입
for(var i in Object)alert(i)//읽은 내용을 표시하여 Object의 프로토타입이 Function
Object.prototype.read=function(){}임을 확인합니다.//Object의 프로토타입을 확장합니다.
for(var i in Function)alert(i)//읽기 표시, Function의 프로토타입은 Object입니까?
이 네 줄의 코드는 JavaScript 프로토타입의 원리를 설명하고 OO 프로그래밍의 프로토타입 상속 방법을 시뮬레이션하는 데 사용됩니다. 그러나 Object와 Function 사이의 관계를 명확하게 설명할 수는 없습니다.
JavaScript 개체 유형의 다양한 기능을 각각 간략하게 설명하겠습니다
.
기본 개체: 실행 호스트에 의존하지 않는 JavaScript 언어에서 제공하는 개체 중 일부는 전역 및 수학과 같은 내장 개체이며 일부는 배열, 부울과 같은 스크립트 실행 환경에서 생성되고 사용됩니다. , 날짜, 함수, 숫자, 개체, RegExp, 오류.
내장 개체: 전역 및 수학 내장 개체와 같이 실행 호스트에 의존하지 않는 JavaScript 언어에서 제공하는 내장 개체는 모두 기본 개체입니다.
호스트 개체: 호스트 환경에 따라 JavaScript 언어에서 제공하는 모든 개체입니다. 기본 개체가 아닌 모든 개체는 IE의 창, WScript의 wscript 인스턴스, 사용자가 만든 클래스와 같은 호스트 개체입니다.