Heim >Web-Frontend >js-Tutorial >Einige leicht zu verwechselnde Methoden in js
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.