Heim > Web-Frontend > js-Tutorial > Hauptteil

Einige leicht zu verwechselnde Methoden in js

高洛峰
Freigeben: 2016-10-17 09:50:49
Original
1215 Leute haben es durchsucht

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]
Nach dem Login kopieren

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
Nach dem Login kopieren

②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
Nach dem Login kopieren

③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;
                        }
                    }
                }
            });
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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;));
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!