>웹 프론트엔드 >JS 튜토리얼 >JavaScript 객체지향 속성 함수 사용법

JavaScript 객체지향 속성 함수 사용법

大家讲道理
大家讲道理원래의
2017-08-19 10:06:341549검색

defineProperty는 객체의 속성 값과 설명자를 설정하는 데 사용됩니다. [[Configurable]], [[Enumerable]], [[Writable]], [[Value]]

속성이 있는 경우 설명자가 [[쓰기 가능]]으로 설정되어 있다는 것은 무엇을 의미합니까?

1         "use strict";2         var person = {};3         Object.defineProperty( person, "name", {4             writable : false,5             value : 'ghostwu'6         } );7         console.log( person.name ); //ghostwu8         person.name = "this is ghostwu";9         console.log( person.name );//ghostwu

defineProperty为person对象,添加一个name属性,两个属性描述符:
  • writeble 속성: false: 쓰기 불가능 true: 쓰기 가능

  • value 속성: 'ghostwu'

<span style="font-size: 16px">也就是说,name这个属性的值为ghostwu, 但是不能修改这个值。writable为false的时候,</span><br><span style="font-size: 16px">如果对这个属性name进行重新赋值(修改)在非严格模式下,赋值会被忽略,在严格模式下会报错.</span><br><br><span style="font-size: 16px"><strong>当一个属性的描述符设置了[[Configurable]]?</strong></span>

     "use strict"; 2         var person = {}; 3         Object.defineProperty( person, "name", { 4             configurable : false, 5             value : 'ghostwu' 6         } ); 7         console.log( person.name ); //ghostwu 8         delete person.name; 9         console.log( person.name );//ghostwu10 11         Object.defineProperty( person, "name", {12             configurable : true,  //报错13             value : 'ghostwu'14         } );

defineProperty는 사람 개체입니다. , 이름 속성 추가,

  • 구성 가능 속성: false: 구성 불가능 true: 구성 가능

  • 값 속성: 'ghostwu'

즉, 이름 속성의 값은 ghostwu이지만 그럴 수 없습니다. be delete 이 값은
configurable이 false인 경우 name 속성을 삭제하면 non-strict 모드에서는 삭제 작업이 무시되고 strict 모드에서는 오류가 보고됩니다

그리고 이를 an로 설정하려는 경우 configurable이 false로 설정된 속성을 다시 true로 변경하면 위 예의 12번째 줄과 같이 오류가 보고됩니다.

속성의 설명자가 [[Enumerable]]로 설정된 경우 ?

     "use strict"; 2         var person = {}; 3         Object.defineProperty(person, "name", { 4             enumerable: true, 5             value: 'ghostwu' 6         }); 7         Object.defineProperty(person, "sex", { 8             enumerable: false, 9             value: 'man'10         });11         Object.defineProperty(person, "age", {12             enumerable: true,13             value: 2214         });15 16         /*17             name--->ghostwu18             age--->2219         */20         for( var i in person ){21             console.log( i + '--->' + person[i] );22         }

defineProperty는 이름, 나이, 성별이라는 3가지 속성을 추가하는 사람 개체입니다. 열거 가능한 속성: false: 열거 불가능 true: 열거 가능
즉, 열거 가능한 경우 속성입니다. 값이 false이면 이 속성은 for...in(루프/열거)에 의해 탐색될 수 없습니다
위의 예에서와 같이 sex는 열거 불가능으로 설정되므로 for..in은 이를 열거하지 않습니다

Object . getOwnPropertyDescriptor() 메서드: 해당 속성의 설명자를 가져올 수 있습니다. 이 메서드는 2개의 매개변수를 지원합니다. 매개변수 1: 속성이 위치한 개체입니다. 반환 값은 객체

     var person = {2             name : 'ghostwu',3             age : 22,4         };5         var descriptor = Object.getOwnPropertyDescriptor( person, "name" );6         console.log( descriptor.configurable ); //true7         console.log( descriptor.enumerable ); //true8         console.log( descriptor.writable ); //true9         console.log( descriptor.value ); //ghostwu

Object.defineProperty를 사용하여 정의되지 않은 객체의 경우 설명자: 구성 가능, 열거 가능, 쓰기 가능, 기본값은 true입니다.

       var person2 = { 2         } 3         Object.defineProperty( person2, "name", { 4             value : 'ghostwu' 5         }); 6  7         var descriptor2 = Object.getOwnPropertyDescriptor( person2, "name" ); 8         console.log( descriptor2.configurable ); //false 9         console.log( descriptor2.enumerable ); //false10         console.log( descriptor2.writable ); //false11         console.log( descriptor2.value ); //ghostwu

<span style='font-family: "Microsoft YaHei"; font-size: 16px'>对于使用Object.defineProperty定义的对象,如果没有配置描述符的值,那么configurable,enumerable,writable默认值为false</span><br><br>

위 내용은 JavaScript 객체지향 속성 함수 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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