Es gibt einige sehr lange Funktionsnamen in JavaScript, die bei ihrer Verwendung zu Verwirrung führen können. Ich möchte sie aussortieren, um meinen Eindruck zu vertiefen.
①Object.getOwnPropertyDescriptor – Liest den Eigenschaftsdeskriptor einer bestimmten Eigenschaft eines Objekts (Wert / beschreibbar / aufzählbar / konfigurierbar)
Diese Methode akzeptiert zwei Parameter: (das Objekt, in dem sich die Eigenschaft befindet , um den Eigenschaftsnamen seines Deskriptors zu lesen), ist der Rückgabewert ein Objekt.
var o = Object.getOwnPropertyDescriptor({x : 1}, 'x'); //{value:1, writable:true, enumerable:true, configurable:true}alert(o); // [object Object]
Diese Methode kann nur ihren eigenen Eigenschaftsdeskriptor abrufen und kann nicht die Merkmale geerbter Eigenschaften erhalten:
var o = Object.getOwnPropertyDescriptor({}, 'toString');<br> alert(o); //undefined
②Object.defineProperty – Legen Sie die Eigenschaft eines Objekts fest (einzeln). Eigenschaften oder Zulassen, dass das neue Attribut bestimmte Eigenschaften hat
Diese Methode akzeptiert drei Parameter: (zu änderndes Objekt, zu erstellendes oder zu änderndes Attribut, Attributdeskriptorobjekt).
var o = {}; Object.defineProperty(o, 'x', { value : 1, writable : true, enumerable : false, configurable : true }); alert(o.x); // 1 Object.defineProperty(o, 'x', {writable : false}); o.x = 2; //不可行,不会报错,但不会修改, o.x = 1; Object.defineProperty(o, 'x', {value : 2}); alert(o.x); // 2
③Object.defineProperties - Legen Sie die Eigenschaften eines Objekts (mehrere) fest oder lassen Sie die neuen Eigenschaften bestimmte Eigenschaften haben
Diese Methode akzeptiert zwei Parameter: (modifiziertes Objekt, Zuordnungstabelle- -enthält die Namen und Attributdeskriptoren aller neuen oder geänderten Attribute).
Object.defineProperties({}, { _year : { value : 2016, writable : true, enumerable : true, configurable : true }, edition : { value : 1 }, year : { get : function(){ return this._year; }, set : function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } } });
Das Obige definiert zwei Datenattribute (_year und edition) und ein Accessor-Attribut (year) in einem leeren Objekt. Die Attribute hier werden alle gleichzeitig erstellt.
④isPrototypeOf – Bestimmen Sie die Beziehung zwischen dem Objekt und dem Prototyp
function Person(){} var friend = new Person(); alert(Person.prototype.isPrototypeOf(friend)); //true
Da sich im Friend-Objekt ein Zeiger auf Person.prototype befindet, wird true zurückgegeben.
⑤Object.getPrototypeOf – Erhalten Sie bequem den Prototyp eines Objekts
function Person(){} Person.prototype.name = 'Tom'; var friend = new Person(); alert(Object.getPrototypeOf(friend) == Person.prototype); // true alert(Object.getPrototypeOf(friend).name); // Tom
Eine neue Methode in ES5, unterstützt von IE9.
⑥hasOwnProperty – Erkennen Sie, ob eine Eigenschaft in einer Instanz oder in einem Prototyp vorhanden ist
function Person(){} Person.prototype.name = 'Tom'; Person.prototype.sayName = function(){ alert(this.name); }; var frient1 = new Person(); frient1.name = 'Jery'; var frient2 = new Person(); alert(frient1.hasOwnProperty('name')); alert(frient2.hasOwnProperty('name'));
Mit hasOwnProperty() können Sie leicht erkennen, ob Sie auf eine Instanzeigenschaft zugreifen Es ist immer noch ein Prototypattribut.