>  기사  >  웹 프론트엔드  >  자바스크립트 객체_자바스크립트 기술의 속성과 프로토타입 사이에는 이런 관계가 있습니다.

자바스크립트 객체_자바스크립트 기술의 속성과 프로토타입 사이에는 이런 관계가 있습니다.

WBOY
WBOY원래의
2016-05-16 19:16:15998검색

ECMAScript는 두 가지 유형의 객체를 인식할 수 있습니다. 하나는 Native Object라고 하며 다른 하나는 문서 객체,
Dom Node
와 같은 실행 환경에서 제공되는 Host Object입니다. 기본 객체는 느슨한 구조이며 속성은 동적으로 추가될 수 있습니다. 모든 속성에는 이름과 값이 있습니다. 이 값은 다른 객체
에 대한 참조 또는 내장 데이터 유형(문자열, 숫자, 부울, Null 또는 정의되지 않음)
다음의 간단한 예에서는 JavaScript 개체가 속성 값을 설정하는 방법과 속성 값을 읽는 방법을 설명합니다.
할당 작업
객체의 속성을 생성하는 것은 매우 간단합니다. 할당 작업을 통해 직접 속성 생성을 완료할 수 있습니다.

var objectRef = new Object(); //일반 자바스크립트 객체를 생성합니다.
testNumber라는 속성은 다음과 같이 생성할 수 있습니다.

objectRef.testNumber = 5;
/* - 또는:- */
objectRef["testNumber"] = 5
복사된 속성 이름이 이미 존재하는 경우에는 해당되지 않습니다. 다시 생성됨 이 속성의 경우 할당 작업은

objectRef.testNumber = 8
/* - 또는:- */
objectRef["testNumber"] = 8; ;
js 객체의 프로토타입은 그 자체가 객체일 수도 있고, 속성을 가질 수도 있습니다. js 객체(프로토타입)의 할당 작업은 일반 객체 속성 생성과 다르지 않습니다
.
값 연산
값 연산에서는 속성과 프로토타입이 다릅니다.가장 간단한 속성 값 연산을 먼저 살펴보겠습니다.

/*객체의 속성에 값을 할당합니다. 객체에 이 속성이 없는 경우 할당 작업 후에 객체는 이 속성을 갖게 됩니다. */
objectRef.testNumber = 8;
/ * 이 속성의 값 읽기 */
var val = objectRef.testNumber;
/* 이제 val에는 방금 objectRef에 할당된 값 8이 있습니다.*/
프로토타입 공개됨
그러나 모두 객체는 프로토타입을 가질 수 있고 프로토타입 자체도 객체이므로 프로토타입을 가질 수도 있습니다. 이 루프는 프로토타입 체인을 형성합니다.
이 체인은 체인에서 null인 형성의 프로토타입을 만나면 종료됩니다. (Object의 기본 프로토타입은 null입니다.)

var objectRef = new Object(); //일반 자바스크립트 객체를 생성합니다.
이번 객체의 프로토타입은 다음과 같습니다. Null입니다. 따라서 objectRef의 프로토타입 체인에는 하나의 객체만 포함됩니다. Object.prototype
다음

/* MyObject1 유형을 빌드하는 생성자
MyObject1
*/
function MyObject1(formalParameter){
/* 개체에 대해 testNumber라는 속성을 만듭니다.
MyObject2 - 유형:-
*/
function MyObject2(formalParameter){
/* testString*/
this.testString = 형식 매개변수;

/* 다음 작업은 MyObject2의 기본 프로토타입 속성을 MyObject1 객체로 대체합니다*/
MyObject2 .prototype = new MyObject1(8);
/* 마지막으로 MyObject2 유형의 객체를 생성합니다* /
var objectRef = new MyObject2( "String_Value" ); 체인의 첫 번째 객체는 MyObject1 객체이며 MyObject1 객체에도 프로토타입이 있습니다.
이 프로토타입은 Object의 기본 프로토타입이며 Object.prototype의 프로토타입은 null입니다.
값 연산이 발생하면 objectRef의 전체 프로토타입 체인이 작동하기 시작합니다.

var val = objectRef.testString;
objectRef 개체에는 testString이라는 속성이 있으며, 이 문장은 testString 값입니다. val

var val = objectRef.testNumber;
objectRef 객체에 testNumber 속성이 없지만 val이 undefine 대신 값 8에 도달하기 때문입니다.
을 찾는 것이 현재 개체에서 발견되지 않으면 이 개체의 프로토타입을 확인합니다. objectRef의 프로토타입은 MyObject1 개체이므로 val은 값 8을 얻습니다.

var val = objectRef.toString;
이제 val은 Object.prototype의 속성인 함수에 대한 참조입니다. MyObject1이나 MyObject2 모두 toString 속성을 정의하지 않으므로
그래서 Object입니다. 프로토타입이 반환됩니다.

var val = objectRef.madeUpProperty;
MyObject1, MyObject2 및 Object가 madeUpProperty 속성을 정의하지 않기 때문에 마지막 값은 정의되지 않습니다.
읽기 작업은 정의되지 않습니다. read obj 자체와 프로토타입 체인에서 발견된 동일한 이름을 가진 첫 번째 속성 값
쓰기 작업은 obj 객체 자체에 대해 동일한 이름을 가진 속성을 생성합니다(이 속성 이름이 존재하지 않는 경우
이는 objectRef를 의미합니다. testNumber = 3은 testNumber라는 이름으로 objectRef 개체에 속성을 생성합니다. 다음에 testNumber를 읽으려고 하면
propertype 체인이 작동하지 않습니다. objectRef의 속성 3과 testNumber만 가져옵니다. MyObject1의 속성은 수정되지 않습니다.

/* MyObject1 유형의 생성자 구성
MyObject1 - type.
*/
function MyObject1(formalParameter){
/* 호출 testNumber
*/
this.testNumber = 형식 매개변수
}
/* MyObject2 유형의 생성자를 구성합니다.
MyObject2 - 유형:-
*/
function MyObject2(formalParameter){
/* 객체 프로토타입 속성에 대해 testString*/이라는 속성을 생성합니다.*/
var obj1 = new MyObject1(8)
MyObject2. 프로토타입 = obj1;
/* 마지막으로 MyObject2*/ 유형의 객체를 생성합니다.
var objectRef = new MyObject2( "String_Value" )
alert(objectRef.testNumber)
objectRef.testNumber = 5;
경고(objectRef.testNumber)
경고(obj1.testNumber);

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.