객체 모델
빨간색 점선은 암시적 프로토타입 체인을 나타냅니다.
이 객체 모델 다이어그램에는 너무 많은 내용이 포함되어 있어 주의 깊게 이해해야 할 부분이 많으며 확인을 위해 몇 가지 테스트 코드를 작성할 수 있습니다. 이 그림을 완전히 이해하고 나면 JavaScript 언어에 대한 이해도가 거의 동일해집니다. 다음은 몇 가지 추가 지침입니다.
1. 그림에서 내장 함수 생성자가 언급된 곳이 여러 군데 있습니다. 이는 동일한 개체이며 테스트하고 확인할 수 있습니다.
//FF2.0, IE7, Opera9.25, Safari3.0.4에서 전달
Function==Function.constructor / /result: true
Function==Function.prototype.constructor //result: true
Function==Object.constructor //result: true
//Function also Number.constructor, String.constructor , Array.constructor, RegExp.constructor 등과 같습니다.
function fn(){}
Function==fn.constructor //결과: true
이는 몇 가지 문제를 보여줍니다. 시스템의 내장 함수 생성자(내장 함수 생성자)를 가리키는 함수는 시스템의 모든 함수가 함수에서 구성됩니다.
2. 왼쪽 하단에 있는 obj1, obj2...objn 범위는 다음과 같은 코드로 생성된 객체를 나타냅니다. function fn1(){}; 이러한 객체는 그렇지 않습니다. 로컬 생성자 메서드가 있지만 프로토타입 체인, 즉 fn.prototype.constructor에서 상속된 생성자 메서드를 가져옵니다. 함수 개체의 생성 프로세스를 보면 그것이 fn 자체라는 것을 알 수 있습니다.
3. 오른쪽 하단의 obj1, obj2...objn 범위는 다음과 같은 코드로 생성된 객체를 나타냅니다. var obj1=new Object(); var obj1 =new Number(123);또는 obj1=/w /;etc. 따라서 이러한 객체의 프로토타입 체인을 가리키는 방식, 프로토타입 체인에서 상속된 생성자의 값(해당 생성자가 내장 Number 생성자인지 내장 Object 생성자인지 등을 참조)은 특정 객체에 따라 달라집니다. 객체 유형. 또한 var obj=new Object(123); 이 방법으로 생성된 객체의 유형은 여전히 Number이며 매개변수 값의 유형에 따라 결정되어야 합니다. 마찬가지로 로컬 생성자는 없지만 프로토타입 체인에서 상속된 생성자 메서드, 즉 내장 *** 생성자를 얻습니다. 특정 생성자는 데이터 유형에 따라 결정됩니다.
샘플 코드
/ /Javascript 객체 모델에서 정의된 함수를 사용하는 데 해당하는 사용자 정의된 객체 대표
function Foo(){}
//Javascript 객체 모델에서 사용자 정의 함수로 생성된 객체에 해당하는 사용자 정의 객체에서 생성된 객체 인스턴스의 표현
var foo = new Foo();
//String 내장 함수 대표
//str은 Javascript의 객체에 해당하는 내장 함수에 의해 생성된 객체 인스턴스를 나타냅니다. 내장 생성자로 생성된 객체 모델
var str = new String("string");
메모리 표시
"Javascript_09_Function 및 Object 이해"와 유사합니다. 메모리 분석 그래프는 동일합니다. 왜일까요? "데이터 모델"에서 언급했듯이 내장 객체는 파생된 유형의 함수로 간주될 수 있습니다. 예를 들어 Number instanceof Function은 true이고 Number instanceof Object는 true입니다. 이런 의미에서 사용자 정의 함수와 동일하게 처리될 수 있습니다. 따라서 내장 객체와 사용자 정의 객체의 생성 과정은 동일합니다.
이 블로그 게시물은 "함수와 객체"에 대한 이해를 바탕으로 작성되었으므로 이 글을 이해하려면 함수와 객체의 관계를 이해해야 합니다!
마지막으로 몇 마디 적습니다: 미친 이론!