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
示例:鉴别原型属性
function hasPrototypeProperty(obj, name){ return name in obj && !obj.hasOwnProperty(name); }
二、__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
三、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
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中文网!