Heim >Web-Frontend >js-Tutorial >Einige leicht zu verwechselnde Methoden in js

Einige leicht zu verwechselnde Methoden in js

高洛峰
高洛峰Original
2016-10-17 09:50:491288Durchsuche

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({}, &#39;toString&#39;);<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, &#39;x&#39;, {
                value : 1,
                writable : true,
                enumerable : false,
                configurable : true
            });
            alert(o.x);   //  1
            
            Object.defineProperty(o, &#39;x&#39;, {writable : false});
            o.x = 2;   //不可行,不会报错,但不会修改, o.x = 1;
            
            Object.defineProperty(o, &#39;x&#39;, {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 = &#39;Tom&#39;;
            
            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 = &#39;Tom&#39;;
            Person.prototype.sayName = function(){
                alert(this.name);
            };
            
            var frient1 = new Person();
            frient1.name = &#39;Jery&#39;;
            var frient2 = new Person();
            
            alert(frient1.hasOwnProperty(&#39;name&#39;));
            alert(frient2.hasOwnProperty(&#39;name&#39;));

Mit hasOwnProperty() können Sie leicht erkennen, ob Sie auf eine Instanzeigenschaft zugreifen Es ist immer noch ein Prototypattribut.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn