Рекомендации по теме: Учебное пособие по JavaScript
(Концепция) Цепочка прототипов относится к связанному списку, состоящему из некоторых прототипов через указатели __proto__. Цепочка прототипов может обслуживать объекты, которые хотят совместно использовать данные в цепочке прототипов, и используется. реализовать механизм наследования JavaScript.
(Указатель цепочки прототипов) Указатели, участвующие в цепочке прототипов:
функция А() { } пусть a1 = новый A() пусть a2 = новый A() пусть a3 = новый A() // Эти строки кода сгенерируют цепочку прототипов, показанную ниже
let A = { тест: "" } пусть a1 = Object.create(A) пусть a2 = Object.create(A) пусть a3 = Object.create(A) // Эти строки кода соответствуют цепочке прототипов, показанной ниже
функция А() { } пусть a1 = новый A() пусть a2 = новый A() пусть a3 = новый A() // Эти строки кода сгенерируют цепочку прототипов, показанную ниже
Цепочку прототипов, включающую наследование, можно проанализировать с помощью упрощенной диаграммы
// Используйте режим паразитной комбинации для реализации унаследованной функции C() {} функция Б() {} Б.прототип = новый C() функция А() {} A.prototype = новый B() пусть a1 = новый A() пусть a2 = новый A() пусть a3 = новый A()
цепочки прототипов Конечная точка цепочки прототипов равна нулю, что не относится к объекту-прототипу
.Динамика прототипа подробно описана в разделе «Объектно-ориентированное программирование». и в основном это связано с переписыванием и модификацией прототипа. Вот несколько примеров.
Пример 1. Динамика прототипа
var A = function() {}; А.прототип.n = 1; вар б = новый A(); А.прототип = { н: 2, м: 3 } вар c = новый A(); консоль.журнал(бн); // 1 console.log(bm); // не определено консоль.журнал(сп); // 2 console.log(cm); // 3
Пример 2. Динамика прототипа и нижней цепочки цепочки прототипов
var F = function() {}; Object.prototype.a = функция() { console.log('а'); }; Function.prototype.b = function() { console.log('b'); } вар f = новый F(); фа(); // а fb(); // Атрибут b не существует Fa(); // a Fb(); //
bОбратившись к первому изображению в упомянутой выше «Цепочковой диаграмме прототипа, не предполагающей наследование», вы можете нарисовать следующую упрощенную задачу анализа эталонной диаграммы.
Пример 3. Динамика прототипа и нижняя цепочка цепочки прототипов.
Функция Person(name) { это.имя = имя } пусть p = новый человек('Том'); console.log(p.__proto__) // Person.prototype console.log(Person.__proto__) // Function.prototype
Пример 4. Динамика прототипа и нижняя цепочка цепочки прототипов
var foo = {}, F = function(){}; Object.prototype.a = 'значение a'; Function.prototype.b = 'значение b'; Объект.прототип = { а: «значение а» } Функция.прототип = { б: «значение б» } console.log(foo.a); // значение a console.log(foo.b); // не определено console.log(Fa); // значение a console.log(Fb); // значение b
относится к первому изображению в упомянутой выше «Цепной диаграмме прототипа, не предполагающей наследование», чтобы нарисовать следующую упрощенную задачу анализа справочной диаграммы. Поскольку foo и F связывают свои прототипы при их объявлении, они получают адрес прототипа, хранящегося в динамической памяти, через указатель, хранящийся в памяти стека. Сначала изменяется прототип. Операция модификации изменит прототип в куче памяти foo, и F по-прежнему сможет получить доступ к измененному результату через указатель стековой памяти. Второй шаг — переписать прототип. JS — это все «операции передачи значений». После переписывания прототипа сначала откройте новое пространство в куче памяти для хранения нового прототипа, а затем откройте новое пространство в памяти стека. для сохранения указателя на указатель кучи. В настоящее время, поскольку указатели памяти стека, хранящиеся в foo и F, отличаются от новых указателей памяти стека, foo и F не могут получить доступ к переписанному прототипу.
Рекомендации по теме: Учебное пособие по изучению JavaScript.
Выше приведено подробное объяснение цепочки прототипов JavaScript с изображениями и текстами. Для получения дополнительной информации обратите внимание на другие соответствующие статьи на китайском веб-сайте PHP.