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 중국어 웹사이트의 기타 관련 기사를 참조하세요!