JS--Day21 (Objekterstellungsmethode, Eigenschaften und Verwendung)

1. Drei Möglichkeiten, Objekte zu erstellen

// 1、简写
let o1 = {
    name:"张三疯",
    sex:"男",
    age:12,
    eat:function(){
    }
}
console.log("o1",o1);


// 2、构造函数
let o2 = new Object();
o2.name="梅超风";
o2.sex="女";
o2.age = 11;
console.log("o2",o2);


// 3、用Object.create;

let o3 = Object.create(o2);//创建o3时,传入o2:表示o3可以拥有o2的一切(属性和方法)。
o3.language = "js";
o3.writeCode = function(){
}
console.log("o3",o3);
console.log("o3.name",o3.name);
console.log("o3.sex",o3.sex);

2. Die Eigenschaften von Objekten und die Verwendung ihrer Eigenschaften

①Eigenschaften des Objekts:

  1. Definition der Attribute:

     1) Die Schreibmethode des Objektattributs lautet: in doppelte Anführungszeichen eingeschlossen. Wenn keine doppelten Anführungszeichen vorhanden sind, werden sie beim Kompilieren automatisch hinzugefügt.

     2) Die Eigenschaften des Objekts können Variablen verwenden. Setzen Sie es in eckige Klammern.

               2.1) ist der Wert des Attributnamens ein String.

               2.2), der Wert des Attributnamens ist Symbol (Symbol ist ein neuer Basisdatentyp in ES6)

let s = "sex";
  let s1 = Symbol();
  let o1 = {
    name: "张三疯",
    [s]: "男",
    [s1]: "我是唯一的",
    age: 12,
  };
  console.log(o1.sex);
  console.log(o1[s1]);

 2. Zugriff auf Attribute:

    1) Verwenden Sie direkt die Zeichenfolge des Attributnamens, geschrieben als: Punkt

    2) Verwenden Sie Variablen für Attributnamen: Die Schreibweise lautet: eckige Klammern.

 console.log(o1.name);
 console.log(o1[s]);
 console.log(o1["sex"]);
 console.log(o1["name"]); //用方括号把属性名包起来了,等价于:o1.name

 3. Beispiel: Verwendung eines JSON-Objekts in einer Schleife

 for (let key in o1) {
    console.log(o1[key]);
  }

② Ergänzung: Symbol

Symbol ist ein neuer Basisdatentyp in ES6, und der Wert dieses Datentyps ist weltweit einzigartig.

Der Wert wird über die Symbolfunktion ermittelt. Der von der Symbolfunktion erhaltene Wert ist jedes Mal anders.   

let s1 = Symbol();
let s2 = Symbol();
console.log(s1===s2);//false;
console.log("s1",s1);
console.log("s2",s2);

3. Statische Eigenschaften (Prototyp) von demo03Object

Statische Eigenschaften von Object: (Eigenschaften der Klasse)

① Rückblick: Bekannte Klassen und Objekte.

Objekte sind Instanziierungen von Klassen. Objekte werden aus Klassen erstellt.

Objekt: Klasse

let o1 = new Object();//o1 ist ein Objekt.

② Informieren:

Attribute einer Klasse: gehört zu einer Klasse. Wenn Sie es verwenden, weisen Sie darauf mit dem Klassennamen hin.

Attribute des Objekts: Gehören zum Objekt. Wenn verwendet, verwenden Sie den Objektnamen, um darauf hinzuweisen.

③Objektklassenattribut (statisches Attribut): Prototyp;

       1) Prototyp bedeutet Prototyp. Prototypen sind ein Kernmerkmal von Klassen.

       2) Jede Klasse verfügt über ein Prototypattribut. Der gesamte Inhalt (Eigenschaften und Methoden) dieser Eigenschaft wird von ihren Objekten (Instanzen) gemeinsam genutzt.

       3) Jedes Klassenobjekt (Instanz) verfügt über ein __proto__-Attribut, das auf das Prototype-Attribut der Klasse verweist.

   console.log("Object.prototype",Object.prototype);    
   let o1 = new Object();
   console.log("o1",o1);
   o1.hasOwnProperty();
   console.log( o1.__proto__ ==  Object.prototype);//true。
   let o2 = new Object();
   console.log("o2",o2);
   o2.hasOwnProperty();
   console.log( o2.__proto__ ==  Object.prototype);//true。

4. Demo04-Ergänzung: Prototyp und Prototypenkette

① Konstruktoren sind Klassen in JS

  1. Im anfänglichen Entwurf von js gibt es kein Klassenkonzept, nur Konstruktoren wie das offizielle Array, String, Date, RegExp usw. sind alle Konstruktoren. Bei Verwendung von let arr = new Array(); let d1 = new Date();

  2. Ab ES6 gibt es das Konzept der Klasse. Konstruktoren waren früher Klassen.

② Objekte erstellen (mit Konstruktoren/Klassen);

     let arr1 = new Array();//arr1 ist das Objekt.

③ Prototyp

   1. Jeder Konstruktor (Klasse) verfügt über eine Prototypeigenschaft. Diese Eigenschaft ist der Prototyp.

   2. Das Objekt (Instanz) der Klasse teilt die Methoden und Eigenschaften des Prototypattributs der Klasse.

   3. Jedes Objekt (Instanz) verfügt über ein __proto__-Attribut, das auf das Prototypattribut der Klasse verweist (dies realisiert die gemeinsame Nutzung).

   4. Die Eigenschaften und Methoden im Prototyp der Klasse sind die Eigenschaften und Methoden der Instanz.

   5. Wenn eine Instanz auf eine Methode (oder ein Attribut) zugreift, suchen Sie zunächst in ihrem eigenen Speicher danach. Wenn sie nicht gefunden werden kann, gehen Sie zum Prototypattribut der Klasse, um sie zu finden.

//   示例1:
    console.log("Array",Array);
    console.dir(Array);
    console.log("Array.prototype",Array.prototype);
    let arr1 = new Array(12,23,34);
    arr1.push();//这就是类(构造函数)Array上prototype定义的方法

    let arr2 = new Array(5,6,7);
    arr2.push();//这就是类(构造函数)Array上prototype定义的方法

//  示例2:
    console.log("Date.prototype",Date.prototype); 
    let d1 = new Date();
    console.log("d1.getFullYear()",d1.getFullYear());

④ Prototypenkette

 1. Alle Klassen (z. B. Array, Date, RegExp usw.) stammen von Object (erben von Object).

 2. Wenn ein Objekt auf Eigenschaften und Methoden zugreift,

     1) Suchen Sie zuerst im Speicher, in dem Sie sich befinden. Wenn Sie ihn nicht finden können, gehen Sie zum Prototyp der Klasse, um ihn zu finden.

     2) Wenn kein Klassenprototyp vorhanden ist, gehen Sie eine Ebene nach oben (übergeordnete Klasse). Wenn nicht, suchen Sie weiter eine Ebene nach oben, bis zum Stammobjekt.

     3) Rufen Sie es auf, wenn es gefunden wird, und melden Sie einen Fehler, wenn es nicht gefunden wird (nicht definiert, undefiniert, keine Funktion usw.);

let d1 = new Date();
console.dir(Date);
d1.hasOwnProperty();
// console.log(d1.str);
// console.log(d1.fn);
let aaa = d1.str;
// d1.fn();

5. Statische Methode von Object (defineProperty)

① Statische Methode von Object: defineProperty;

Object.defineProperty(Objekt, Eigenschaftsname, Eigenschaftseinstellung): Sie können Eigenschaften zum Objekt definieren (hinzufügen).

 1. Nehmen Sie für die durch Object.defineProperty() definierten Eigenschaften einige Einstellungen an den Eigenschaften vor (z. B.: Legen Sie fest, dass die Eigenschaften schreibgeschützt sind).

  let o1 = {}; Zum Beispiel: Attribut sex zum Objekt o1 hinzufügen; 

 Object.defineProperty(o1,"sex",{
    value:"男",
    writable:false //让sex属性只读。
  })
console.log(o1.sex);
o1.sex="女";
console.log(o1.sex);

 2. Object.defineProperty(); kann Accessor-Eigenschaften definieren.

let person = {
    _age:12//这个属性保存数据
};
// person.age = 250;//??这样会导致,在程序里出现了不合法数据
// 给person增加一个属性age(用来完成读取属性 _age的值)。
Object.defineProperty(person,"age",{
    // 当修改age属性时,会调用set方法
    set:function(val){ //参数val就是赋的值。
        // console.log("set",val);
        if(val<0 || val>150){
            return;
        }
        this._age = val;
    },
    // 当读取(使用)age属性时,会调用get方法
    get:function(){
        // console.log("get");
        return this._age;//get方法必须要有返回值。
    }
})
person.age = 20;//修改age的值,会调用set方法
console.log("person.age",person.age);//读取age的值,会调用get方法
person.age = 250;
console.log("person.age",person.age);//读取age的值,会调用get方法

②Beliebtheit: Es gibt drei Eigenschaften von JavaScript-Objekten:

 1. Benanntes Datenattribut (am häufigsten verwendet): Es wird zum Speichern von Daten verwendet. Dies ist das am häufigsten verwendete Attribut (dh das zuvor im JSON-Objekt definierte Attribut).

 2. Benennung von Accessor-Attributen (wichtige und schwierige Punkte):

    1) Diese Eigenschaft enthält zwei Funktionen: Setter und Getter.

    2) Schreiben Sie: Wenn Sie einer Eigenschaft einen Wert zuweisen, wird die Setter-Methode aufgerufen

    3), lesen: Beim Lesen der Eigenschaft wird die Getter-Methode aufgerufen.

 3. Interne Attribute (einfach verstehen):

    1) wird dieses Attribut im Allgemeinen in eckige Klammern eingeschlossen (z. B.: [[prototypt]]).

    2) Auf dieses Attribut kann nicht per Code zugegriffen werden. Allgemeine JS bieten jedoch einen anderen Attributzugriff (z. B. __proto__).

console.dir(Array);

6. Statische Methode des Objekts (Schlüssel)

Object.keys(object): Ruft alle Schlüssel des Objekts ab. Der Rückgabewert ist ein Array, das die Zeichenfolgendarstellung jedes Schlüssels enthält.

let o1 = {
    name:"张三疯",
    sex:"男",
    eat:function(){
    }
}
console.log(Object.keys(o1));//["name", "sex","eat"]
console.log(Object.keys(o1).length);//3

Seven.Object-Objekt-(Instanz-)Methode

hasOwnProperty (Eigenschaft): Bestimmen Sie, ob das Objekt die Eigenschaft hat (nicht die Eigenschaft auf dem Prototyp).

let o1 = {
    name:"张三疯",
    sex:"男",
    eat:function(){
    }
}
console.log(o1.hasOwnProperty("name"));//true
console.log(o1.hasOwnProperty("eat"));//true
console.log(o1.hasOwnProperty("hasOwnProperty"));//false
console.log("Object.prototype",Object.prototype);

Acht. Instanz des Operators

Instanz von: Bestimmt, ob das Objekt eine Instanz einer bestimmten Klasse ist.

let o1 = {
    name:"张三疯",
    sex:"男"
}
console.log("o1.name",o1.name);
console.log(o1 instanceof Object);//true
let arr = [];//new Array();
console.log(arr instanceof Array);//true
let d1 = new Date();
console.log(d1 instanceof Date);//true
console.log(d1 instanceof Object);//true
class Person{
    constructor(){
        this.name="张三疯";
        this.sex="男"
    }
}
let p1 = new Person();
console.log("p1.name",p1.name);
console.log(p1 instanceof Person);//true
console.log("o1 instanceof Person",o1 instanceof Person);//false
console.log(p1 instanceof Object);//true

Supongo que te gusta

Origin blog.csdn.net/weixin_72756818/article/details/129801972
Recomendado
Clasificación