Heim > Web-Frontend > js-Tutorial > Detaillierte Erläuterung praktischer Möglichkeiten zum Erstellen von Objekten und zur Objektvererbung in JavaScript_Grundkenntnisse

Detaillierte Erläuterung praktischer Möglichkeiten zum Erstellen von Objekten und zur Objektvererbung in JavaScript_Grundkenntnisse

WBOY
Freigeben: 2016-05-16 15:11:31
Original
1242 Leute haben es durchsucht

Konvention in diesem Artikel: Ohne spezielle Deklaration beziehen sich Attribute auf Attribute oder Methoden.

Das Erstellen von Objekten und die Objektvererbung sind eigentlich dasselbe: Die von uns benötigten Instanzobjekte erhalten private Eigenschaften über den Konstruktor und gemeinsame Eigenschaften über die Prototypenkette. Was ist ein guter Weg? Private Eigenschaften werden über den Konstruktor abgerufen (unabhängig von benutzerdefinierten privaten Eigenschaften in der Instanz) und müssen nicht neu geschrieben werden. Gemeinsame Eigenschaften werden über die Prototypenkette gefunden und müssen nicht wiederholt erstellt werden.

Universeller Ansatz

Erstellen Sie Objekte mit einer Kombination aus Konstruktormuster und Prototypmuster

function HNU_student(name) {
  this.name = name;
  this.sayName = function() {
    return this.name;
  };
}
HNU_student.prototype = {
  school: 'HNU',
  saySchool: function() {
    return this.school;
  }
};
Object.defineProperty(HNU_student, 'constructor', {value: HNU_student});

var hiyohoo = new HNU_student('xujian');

Nach dem Login kopieren

Der Prototyp wird durch Literale neu geschrieben und der Konstruktor des Prototyps zeigt auf Object. Bei Bedarf muss der Konstruktor neu definiert werden.

Parasitäre kombinatorische Vererbung

function object(o) {
  function F() {};
  F.prototype = o;
  return new F();
}
function inheritPrototype(child, parent) {
  var prototype = object(parent.prototype);
  prototype.constructor = child;
  child.prototype = prototype;
}

function HNU_student(name) {
  this.name = name;
  this.sayName = function() {
    return this.name;
  };
}
HNU_student.prototype.school = 'HNU';
HNU_student.prototype.saySchool = function() {
  return this.school;
};

function Student_2011(name, number) {
  HNU_student.call(this, name);
  this.number = number;
  this.sayNumber = function() {
    return this.number;
  }
}
inheritPrototype(Student_2011, HNU_student);
Student_2011.prototype.graduationTime = 2015;
Student_2011.prototype.sayGraduationTime = function() {
  return this.graduationTime;
};

var hiyohoo = new Student_2011('xujian', 20110803203);

Nach dem Login kopieren

Die Rolle von object(): Verwandelt das als Parameter übergebene Objekt in den Prototyp der Instanz, und die Eigenschaften des Objekts werden von allen Instanzen gemeinsam genutzt.

Gemeinsame Attribute: inheritPrototype(Student_2011, HNU_student);, der Unterkonstruktor-Prototyp wird zu einer Instanz des Superkonstruktor-Prototyps und die Attribute im Superkonstruktor-Prototyp werden mit dem Unterkonstruktor geteilt.
Private Eigenschaften: HNU_student.call(this, name); Rufen Sie beim Erstellen einer Instanz über den Unterkonstruktor den Superkonstruktor auf, um private Eigenschaften zu erstellen.

Andere Möglichkeiten, Objekte zu erstellen

Dynamischer Prototypenmodus

function HNU_student(name) {
  this.name = name;
  this.sayName = function() {
    return this.name;
  };

  if (!HNU_student.prototype.school) {
    HNU_student.prototype.school = 'HNU';
    HNU_student.prototype.saySchool = function() {
      return this.school;
    };
  }
}

var hiyohoo = new HNU_student('xujian');

Nach dem Login kopieren

Fügen Sie die im Prototyp definierten gemeinsamen Eigenschaften in den Konstruktor ein, verwenden Sie Beurteilungsanweisungen und initialisieren Sie die gemeinsamen Eigenschaften des Prototyps, wenn der Konstruktor zum ersten Mal aufgerufen wird, um eine Instanz zu erstellen.

Parasitäres Konstruktormuster

function SpecialArray() {
  var values = new Array();
  values.push.apply(values, arguments);
  values.toPipedString = function() {
    return this.join('|');
  };

  return values;
}

var colors = new SpecialArray('red', 'black', 'white');

Nach dem Login kopieren

wird verwendet, um dem nativen Konstruktor spezielle Attribute hinzuzufügen.

Andere Möglichkeiten der Objektvererbung

Kombinierte Vererbung

function HNU_student(name) {
  this.name = name;
  this.sayName = function() {
    return this.name;
  };
}
HNU_student.prototype.school = 'HNU';
HNU_student.prototype.saySchool = function() {
  return this.school;
};
function Student_2011(name, number) {
  HNU_student.call(this, name);
  this.number = number;
  this.sayNumber = function() {
    return this.number;
  };
}
Student_2011.prototype = new HNU_student();
Student_2011.prototype.constructor = Student_2011;
Student_2011.prototype.graduationTime = 2015;
Student_2011.prototype.sayGraduationTime = function() {
  return this.graduationTime;
}
var hiyohoo = new Student_2011('xujian', 20110803203);
Nach dem Login kopieren

Gemeinsame Attribute: Student_2011.prototype = new HNU_student();, der Prototyp des Unterkonstruktors zeigt auf den Prototyp des Superkonstruktors und die Instanz findet alle gemeinsam genutzten Attribute über die Prototypenkette.
Private Eigenschaften: HNU_student.call(this, name); Rufen Sie beim Erstellen einer Instanz über den Unterkonstruktor den Superkonstruktor auf, um private Eigenschaften zu erstellen.

Fehler: Der Superkonstruktor wird zweimal aufgerufen. Student_2011.prototype = new HNU_student(); gleichzeitig werden die vom Superkonstruktor definierten privaten Eigenschaften im Unterkonstruktorprototyp überschrieben und durch die gleichnamigen Eigenschaften blockiert Beispiel.

Prototypische Vererbung, parasitäre Vererbung

function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}
var student1 = {
  school: 'HNU',
  saySchool: function() {
    return this.school;
  }
};
var student2 = object(student1);
Nach dem Login kopieren

Object.creat() ist eine neue Methode in ECMAScript5. Sie akzeptiert zwei Parameter: Einer ist das Originalobjekt als Prototyp und der andere ist das Objekt, das Attribute überschreibt oder hinzufügt. Seine Funktion ist dieselbe wie das benutzerdefinierte Objekt ().

var student1 = {
  name: 'xujian',
  school: 'HNU'
};
var student2 = Object.create(student1, {
  name: {
    value: 'huangjing'
  }
});
Nach dem Login kopieren

Parasitische Vererbung fügt zusätzliche Attribute hinzu, um Objekte basierend auf der prototypischen Vererbung zu verbessern.

function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}
function creatAnother(original) {
  var clone = object(original);
  clone.sayHi = function() {
    alert('Hi!');
  };
  return clone;
}
var student1 = {
  school: 'HNU',
  saySchool: function() {
    return this.school;
  }
};
var student2 = creatAnother(student1);
Nach dem Login kopieren

Prototypische Vererbung und parasitäre Vererbung werden verwendet, um Instanzobjekte zu erstellen, die vorhandenen Objekten ähneln.

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