Explorez les différences et l'utilisation des prototypes et des chaînes de prototypes
En JavaScript, la programmation orientée objet est une méthode de programmation couramment utilisée. Le prototype et la chaîne de prototypes sont deux concepts importants lors de la programmation orientée objet. Cet article explore les différences entre les prototypes et les chaînes de prototypes, comment les utiliser et fournit des exemples de code spécifiques.
Concepts de base du prototype et de la chaîne de prototypes :
__proto__
. __proto__
属性来访问。__proto__
属性连接起来的链式结构。当访问一个对象的属性时,如果该对象本身没有该属性,则会沿着原型链向上查找。原型与原型链的区别:
Object.getPrototypeOf(obj)
__proto__
. Lors de l'accès à une propriété d'un objet, si l'objet lui-même ne possède pas la propriété, celle-ci sera recherchée tout au long de la chaîne de prototypes. Object.getPrototypeOf(obj)
. La chaîne de prototypes est une association entre objets, qui consiste en le prototype de chaque objet. Grâce à la chaîne de prototypes, les objets peuvent partager les propriétés et les méthodes du prototype.
function Person(name) { this.name = name; } Person.prototype.sayHello = function() { console.log('Hello, ' + this.name); }; var person1 = new Person('Alice'); person1.sayHello(); // 输出:Hello, Alice
function Student(name, grade) { Person.call(this, name); // 调用父类构造函数 this.grade = grade; } Student.prototype = Object.create(Person.prototype); // 继承父类原型 Student.prototype.constructor = Student; // 修复构造函数 Student.prototype.study = function() { console.log(this.name + ' is studying in grade ' + this.grade); }; var student1 = new Student('Bob', 5); student1.sayHello(); // 输出:Hello, Bob student1.study(); // 输出:Bob is studying in grade 5
Trouver des propriétés et des méthodes :
console.log(student1.name); // 输出:Bob console.log(student1.__proto__ === Student.prototype); // 输出:true console.log(student1.__proto__.__proto__ === Person.prototype); // 输出:true console.log(student1.__proto__.__proto__.__proto__ === Object.prototype); // 输出:true console.log(student1.hasOwnProperty('name')); // 输出:true console.log(student1.hasOwnProperty('sayHello')); // 输出:false
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!