defineProperty wird verwendet, um den Attributwert und den Deskriptor eines Objekts festzulegen. Es gibt 4 Deskriptoren: [[Konfigurierbar]], [[Aufzählbar]], [[Beschreibbar]], [[Wert]]
Was bedeutet es, wenn der Deskriptor einer Eigenschaft auf [[Schreibbar]] gesetzt ist?
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属性,两个属性描述符:
schreibbares Attribut: falsch: nicht beschreibbar, wahr: beschreibbar
Wertattribut: '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 ist das Personenobjekt, fügen Sie ein Namensattribut hinzu,
konfigurierbares Attribut: false: nicht konfigurierbar, true: konfigurierbar
value-Attribut : 'ghostwu'
Das heißt, der Wert des Namensattributs ist ghostwu, aber dieser Wert kann nicht gelöscht werden. Wenn
konfigurierbar ist, ist das Namensattribut falsch gelöscht, im nicht-strikten Modus wird der Löschvorgang ignoriert. Im strikten Modus wird ein Fehler gemeldet.
Und wenn Sie eine konfigurierbare Eigenschaft auf „false“ ändern möchten auf true wird ein Fehler gemeldet, wie in Zeile 12 des obigen Beispiels gezeigt
Wenn ein Eigenschaftsdeskriptor auf [[Enumerable]] gesetzt ist?
"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 ist das Personenobjekt und fügt 3 Attribute hinzu: Name, Alter, Geschlecht: false :Nicht aufzählbar wahr: Aufzählbar
Das heißt, ein Attribut ist falsch, dann kann dieses Attribut nicht von for...in (Schleife/Aufzählung) durchlaufen werden
Wie im obigen Beispiel , sex ist auf nicht aufzählbar eingestellt, daher wird for..in die Methode Object.getOwnPropertyDescriptor() nicht auflisten. Diese Methode unterstützt 2 Parameter , Parameter 1: das Objekt, in dem sich das Attribut befindet. Parameter 2: Attributname. Der Rückgabewert ist ein Objekt
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
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
Das obige ist der detaillierte Inhalt vonVerwendung objektorientierter JavaScript-Attributfunktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!