Maison > interface Web > js tutoriel > Explication détaillée des méthodes pratiques de création d'objets et d'héritage d'objets dans les connaissances JavaScript_Basic

Explication détaillée des méthodes pratiques de création d'objets et d'héritage d'objets dans les connaissances JavaScript_Basic

WBOY
Libérer: 2016-05-16 15:11:31
original
1263 Les gens l'ont consulté

Convention dans cet article : Sans déclaration particulière, les attributs font référence à des attributs ou à des méthodes.

La création d'objets et l'héritage d'objets sont en fait la même chose : les objets d'instance dont nous avons besoin obtiennent des propriétés privées via le constructeur et des propriétés partagées via la chaîne de prototypes. Qu'est-ce qu'une bonne manière ? Les propriétés privées sont obtenues via le constructeur (indépendamment des propriétés privées personnalisées dans l'instance) et n'ont pas besoin d'être réécrites. Les propriétés partagées sont trouvées via la chaîne de prototypes et n'ont pas besoin d'être créées à plusieurs reprises.

Approche universelle

Créez des objets en utilisant une combinaison de modèle de constructeur et de modèle de prototype

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');

Copier après la connexion

Le prototype sera réécrit via des littéraux, et le constructeur du prototype pointe vers Object Si nécessaire, le constructeur doit être redéfini.

Héritage combinatoire parasitaire

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);

Copier après la connexion

Le rôle de object() : Transformez l'objet passé en paramètre en prototype de l'instance, et les propriétés de l'objet sont partagées par toutes les instances.

Attributs partagés : hériterPrototype(Student_2011, HNU_student);, le prototype du sous-constructeur devient une instance du prototype du super-constructeur et les attributs du prototype du super-constructeur sont partagés avec le sous-constructeur.
Propriétés privées : HNU_student.call(this, name);, lors de la création d'une instance via le sous-constructeur, appelez le super-constructeur pour créer des propriétés privées.

Autres façons de créer des objets

Mode prototype dynamique

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');

Copier après la connexion

Placez les propriétés partagées définies dans le prototype dans le constructeur, utilisez des instructions de jugement et initialisez les propriétés partagées du prototype lorsque le constructeur est appelé pour la première fois pour créer une instance.

Modèle de constructeur parasite

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');

Copier après la connexion

est utilisé pour ajouter des attributs spéciaux au constructeur natif.

Autres modes d'héritage d'objets

Héritage combiné

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);
Copier après la connexion

Attributs partagés : Student_2011.prototype = new HNU_student();, le prototype du sous-constructeur pointe vers le prototype du super-constructeur, et l'instance trouve tous les attributs partagés à travers la chaîne de prototypes.
Propriétés privées : HNU_student.call(this, name);, lors de la création d'une instance via le sous-constructeur, appelez le super-constructeur pour créer des propriétés privées.

Défaut : Le super constructeur est appelé deux fois. Student_2011.prototype = new HNU_student(); en même temps, les propriétés privées définies par le super constructeur sont créées dans le prototype du sous-constructeur. Les propriétés privées de ces prototypes sont écrasées et bloquées par les propriétés du même nom dans le prototype. exemple.

Héritage prototypique, héritage parasitaire

function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}
var student1 = {
  school: 'HNU',
  saySchool: function() {
    return this.school;
  }
};
var student2 = object(student1);
Copier après la connexion

Object.creat() est une nouvelle méthode dans ECMAScript5. Elle accepte deux paramètres : l'un est l'objet d'origine comme prototype et l'autre est l'objet qui remplace ou ajoute des attributs. Sa fonction est la même que celle de l'objet personnalisé. ().

var student1 = {
  name: 'xujian',
  school: 'HNU'
};
var student2 = Object.create(student1, {
  name: {
    value: 'huangjing'
  }
});
Copier après la connexion

L'héritage parasite ajoute des attributs supplémentaires pour améliorer les objets basés sur l'héritage prototypique.

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);
Copier après la connexion

L'héritage prototypique et l'héritage parasite sont utilisés pour créer des objets d'instance similaires aux objets existants.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal