本文实例讲述了JS函数进阶之继承用法。分享给大家供大家参考,具体如下: 直接代码,不解释: <html> <head> <title>js函数继承进阶</title> <meta charset="UTF-8"/> [removed] function person(name,age){ //对象的创建 this.name=name; this.age=age; // thi JavaScript中的继承是面向对象编程的重要概念,它允许子类继承父类的属性和方法,从而实现代码的重用和扩展。在本实例中,我们主要探讨了如何通过原型(prototype)来实现JavaScript中的继承。 `person`、`book` 和 `czxt` 是三个构造函数,分别用于创建不同类型的对象。`person` 是基础类,`book` 和 `czxt` 是基于 `person` 的子类。在JavaScript中,对象的原型是通过 `prototype` 属性来定义的,这使得我们可以为一个类添加方法或属性,而这些方法或属性会被所有该类的实例共享。 例如,`person.prototype.read` 定义了一个新的方法 `read`,所有 `person` 类的实例都可以调用这个方法。同样,`book.prototype.sign` 定义了一个 `sign` 方法,`czxt.prototype.appear` 定义了 `appear` 方法。 在继承方面,我们看到 `book.prototype` 被赋值为一个新的 `book` 对象,这使得 `book` 类的所有实例都能访问 `book` 类的方法和属性。然而,这种方式实际上并不是标准的继承方式,而是“包含”或“混入”(mixin)。真正的继承是通过将一个对象的原型设置为另一个对象来实现的,如 `czxt.prototype = new book()`,这样 `czxt` 就继承了 `book` 的所有属性和方法。 在实例中,`p1` 是一个 `person` 类型的对象,但它同时也包含了 `book` 的属性和方法,这是因为 `person.prototype` 被赋予了一个 `book` 实例。因此,`p1` 可以调用 `book` 的 `name` 属性和 `sign` 方法。 值得注意的是,当子类和父类有同名属性时,子类的属性会覆盖父类的属性,例如 `p1.name` 会显示子类的 `name` 值。而要访问被覆盖的属性,可以通过调用父类的构造函数来实现,或者在子类中通过 `Object.create` 或 `__proto__` 来访问。 在更复杂的情况下,如 `p1.book.subject.appear()`,这里涉及到多层继承和属性的查找,只有通过属性链路才能访问到 `czxt` 类的方法。而 `p1.sign().appear()` 则利用了 `sign` 方法返回一个新的 `book` 实例,从而能够调用其 `appear` 方法。 这个实例展示了JavaScript中继承和原型链的基本使用。在实际开发中,我们通常会使用更现代的ES6的 `class` 关键字和 `extends` 关键字来实现继承,因为它们提供了更清晰的语法和更好的性能。但是理解原型和原型链仍然是理解和调试JavaScript代码的基础。
- 粉丝: 4
- 资源: 922
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- apache-maven-3.6.1-bin.zip
- c593f5fc-d4a7-4b43-8ab2-51afc90f3f62
- IIR滤波器参数计算函数
- WPF树菜单拖拽功能,下级目录拖到上级目录,上级目录拖到下级目录.zip
- CDH6.3.2版本hive2.1.1修复HIVE-14706后的jar包
- 鸿蒙项目实战-天气项目(当前城市天气、温度、湿度,24h天气,未来七天天气预报,生活指数,城市选择等)
- Linux环境下oracle数据库服务器配置中文最新版本
- Linux操作系统中Oracle11g数据库安装步骤详细图解中文最新版本
- SMA中心接触件插合力量(插入力及分离力)仿真
- 变色龙记事本,有NPP功能,JSONview功能