原型继承和原型链

原型继承

在 JavaScript 中,每个函数都有一个特殊的属性叫做 prototype(原型)。当你用 new 关键字来创建一个对象实例时,这个实例会自动关联到构造函数的 prototype 上。

const Person = function(firstName, birthYear) {
  this.firstName = firstName;
  this.birthYear = birthYear;
};

通过 new Person(‘IT知识一享’, 2024) 创建了一个 ItShare 对象实例。这个实例 ItShare 会有一个隐藏属性 proto,它指向 Person.prototype,即 Person 函数的原型对象。

原型链

原型链是一种机制,允许对象通过它们的原型链查找和继承属性和方法。如果在一个对象上访问属性或方法时,对象本身没有定义,JavaScript 引擎会沿着这个对象的 proto(即它的构造函数的 prototype)向上查找,直到找到对应的属性或方法或者到达原型链的顶端(即 Object.prototype)。

示例

console.log(ItShare instanceof Person); 

true,原因是ItShare 是 Person 的实例;

ItShare.CalcAge(); 

输出 75,通过原型继承,ItShare 实例可以访问到 Person.prototype 上的 CalcAge 方法

.__proto__ === Person.prototype); // true,ItShare 的 __proto__ 指向 Person.prototype
console.log(Person.prototype.isPrototypeOf(ItShare)); // true,Person.prototype 是 ItShare 的原型
console.log(Person.prototype.isPrototypeOf(Person)); // false,Person.prototype 不是 Person 函数自身的原型对象

重点理解

● 原型对象:每个函数在创建时都有一个 prototype 属性,它指向一个对象,这个对象包含函数的默认属性和方法。
● 实例的原型:通过 new 关键字创建对象实例时,实例会有一个 proto 属性,指向构造函数的 prototype。
● 原型链:通过原型链,对象可以访问其构造函数的原型对象上定义的属性和方法。
● isPrototypeOf 方法:用于检查一个对象的原型链中是否包含另一个对象的原型。

相关推荐

  1. 原型继承原型

    2024-07-22 03:48:03       25 阅读
  2. 继承原型

    2024-07-22 03:48:03       57 阅读
  3. 原型继承

    2024-07-22 03:48:03       55 阅读
  4. 原型原型

    2024-07-22 03:48:03       55 阅读
  5. 原型原型

    2024-07-22 03:48:03       57 阅读
  6. js 原型 原型

    2024-07-22 03:48:03       62 阅读
  7. 理解原型原型

    2024-07-22 03:48:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 03:48:03       103 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 03:48:03       114 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 03:48:03       93 阅读
  4. Python语言-面向对象

    2024-07-22 03:48:03       99 阅读

热门阅读

  1. 【渗透入门】反序列化

    2024-07-22 03:48:03       23 阅读
  2. Windows图形界面(GUI)-DLG-C/C++ - 月历控件(MonthCalendar)

    2024-07-22 03:48:03       24 阅读
  3. Dijkstra

    2024-07-22 03:48:03       23 阅读
  4. B树:高效的数据存储结构

    2024-07-22 03:48:03       22 阅读
  5. newton算法实现的div的verilog

    2024-07-22 03:48:03       21 阅读
  6. Servlet会话跟踪基础

    2024-07-22 03:48:03       21 阅读
  7. 实变函数精解【6】

    2024-07-22 03:48:03       22 阅读
  8. springSecurity学习之springSecurity流程

    2024-07-22 03:48:03       21 阅读