Erkunden Sie die Unterschiede und die Verwendung von Prototypen und Prototypketten
In JavaScript ist die objektorientierte Programmierung eine häufig verwendete Programmiermethode. Prototyp und Prototypenkette sind zwei wichtige Konzepte bei der objektorientierten Programmierung. In diesem Artikel werden die Unterschiede zwischen Prototypen und Prototypketten sowie deren Verwendung untersucht und spezifische Codebeispiele bereitgestellt.
Grundlegende Konzepte von Prototypen und Prototypenketten:
__proto__
zugegriffen werden kann. __proto__
属性来访问。__proto__
属性连接起来的链式结构。当访问一个对象的属性时,如果该对象本身没有该属性,则会沿着原型链向上查找。原型与原型链的区别:
Object.getPrototypeOf(obj)
__proto__
verbunden sind. Wenn beim Zugriff auf eine Eigenschaft eines Objekts das Objekt selbst nicht über die Eigenschaft verfügt, wird entlang der Prototypenkette nach ihr gesucht. Object.getPrototypeOf(obj)
abgerufen werden. Die Prototypenkette ist eine Assoziation zwischen Objekten, die aus dem Prototyp jedes Objekts besteht. Über die Prototypenkette können Objekte die Eigenschaften und Methoden des Prototyps gemeinsam nutzen.
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
Eigenschaften und Methoden finden:
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
Das obige ist der detaillierte Inhalt vonAnalysieren Sie die Gemeinsamkeiten, Unterschiede und Anwendungsmethoden von Prototypen und Prototypenketten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!