Maison > interface Web > js tutoriel > le corps du texte

Introduction détaillée à la différence entre prototype et __proto__

高洛峰
Libérer: 2017-01-10 11:11:33
original
1298 Les gens l'ont consulté

prototype与__proto__区别

Chaque constructeur est une fonction qui possède une propriété nommée « prototype » qui est utilisée pour implémenter l'héritage basé sur un prototype et les propriétés partagées. Chaque objet créé par un constructeur a une référence implicite (appelée prototype de l'objet) à la valeur de la propriété « prototype » de son constructeur. 
Lorsqu'un constructeur crée un objet, cet objet fait implicitement référence à la propriété prototype du constructeur dans le but de résoudre les références de propriété. La propriété prototype du constructeur peut être référencée par l'expression de programme constructor.prototype, et les propriétés ajoutées au prototype d'un objet sont partagées, par héritage, par tous les objets partageant le prototype. Alternativement, un nouvel objet peut être créé avec un prototype explicitement spécifié à l'aide de la fonction intégrée Object.create. –Spécification du langage ECMAScript® 2015

__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!! 

使用Object.getPrototypeOf()代替__proto__!!!

一、prototype

几乎所有的函数(除了一些内建函数)都有一个Le prototype Prototype La fonction hasOwnProperty() est également disponible dans le système de recherche en ligne. vrai。 

示例:自有属性&原型属性

var obj = {a: 1};
obj.hasOwnProperty("a"); // true
obj.hasOwnProperty("toString"); // false
"a" in obj; // true
"toString" in obj; // true
Copier après la connexion

   

示例:鉴别原型属性

function hasPrototypeProperty(obj, name){
  return name in obj && !obj.hasOwnProperty(name);
}
Copier après la connexion

   

二、__proto__

Proto__proto__型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

function Foo(){}
var Boo = {name: "Boo"};
Foo.prototype = Boo;
var f = new Foo();
 
console.log(f.__proto__ === Foo.prototype); // true
console.log(f.__proto__ === Boo);  // true
Object.getPrototypeOf(f) === f.__proto__;  // true
Copier après la connexion

   

三、Object.getPrototypeOf()

一个对象实例通过内部属性[[Prototype]]跟踪其原垞对象。Object.getPrototype Of() indique que[[Prototype]] est utilisé, et isPrototypeOf() indique que Il s'agit d'un proto__的属.性,该属性可以直接读写[[Prototype]]属性。 

示例:原型对象

function Person(name) {
  this.name = name;
}
Person.prototype = {
  constructor: Person,
  sayName: function(){
    console.log("my name is " + this.name);
  }
}
var p1 = new Person("ligang");
var p2 = new Person("Camile");
p1.sayName();  // my name is ligang
p2.sayName();  // my name is Camile
Copier après la connexion

Bien qu'Object.prototype.proto soit pris en charge aujourd'hui dans la plupart des navigateurs, son existence et son comportement exact n'ont été standardisés que dans la spécification ECMAScript 6 comme une fonctionnalité héritée pour garantir la compatibilité avec les navigateurs Web. Pour une meilleure prise en charge, il est recommandé d'utiliser uniquement Object.getPrototypeOf() à la place. –MDN

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多prototype与__proto__区别详细介绍相关文章请关注PHP中文网!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!