在 JavaScript 中执行继承

2024-03-04

现在,虽然我知道您不能像在 C# 中那样执行继承,但我在互联网上看到它提到这是可能的。如果无法使用纯 JavaScript 代码,那么是否可以使用Ext JS http://en.wikipedia.org/wiki/Ext_JS如果是这样怎么办?


JavaScript 面向对象的范式是基于原型 http://en.wikipedia.org/wiki/Prototype-based_programming。没有“类”,只有对象。

您可以通过不同的方式实现继承。两种更流行的替代方案是“伪古典”和“原型”形式。例如:

伪经典继承

我认为这是最流行的方式。你创造构造函数 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Creating_New_Objects/Using_a_Constructor_Function与您一起使用的new https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/new_Operator运算符,并通过构造函数原型添加成员。

// Define the Person constructor function
function Person() {}

Person.prototype.sayHello = function(){
    alert ('hello');
};

// Define the Student constructor function
function Student() {}

// Inherit from Person
Student.prototype = new Person();

// Correct the constructor pointer, because it points to Person
Student.prototype.constructor = Student;

// Replace the sayHello method (a polymorphism example)
Student.prototype.sayHello = function () {
    alert('hi, I am a student');
}

var student1 = new Student();
student1.sayHello();

原型继承 http://javascript.crockford.com/prototypal.html

基本上,我们创建一个辅助函数,它将一个对象作为参数并返回一个继承旧对象的空新对象,对象继承自对象.

// Helper function
if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

var person = {
    sayHello : function () {
        alert('Person object');
    },
    walk : function () {
        alert('walk');
    }
};

var student1 = Object.create(person);
student1.sayHello = function () {
    alert('hello I am a student');
};

另一种有趣的形式是寄生遗传。在“派生”构造函数中,您创建一个“基础”对象实例。该对象被增强并返回新实例:

// Person constructor function
function Person(name) {
    this.name = name;
}

function Student(value) {
    var that = new Person(value);
    that.sayHello = function () {
        alert('hello I am a student');
    };
    return that;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中执行继承 的相关文章

随机推荐

  • 如何动态添加更多组件 React Native

    我想在单击按钮后添加更多组件 您可以分享代码或想法以便我可以实施吗 如图所示 每次用户单击添加按钮时 都会添加一行 组件 这是哪里state https facebook github io react native docs state
  • 引用 Oracle 中视图的外键

    我尝试使用外键引用视图 但收到此错误 错误 ORA 02270 此列列表没有匹配的唯一键或主键 不过 我已在此视图上创建了一个主键 并在 TOAD 的 约束 选项卡中对其进行了验证 这是我试图创建的表 CREATE TABLE QUESTI
  • Cronjob:找不到命令

    我有一个如下的 cronjob 10 root cd some directory python3 FILE py gt gt Output txt 2 gt 1 如果我从常规命令行运行该命令 它工作正常 但是当从 cronjob 运行时
  • 函数内的 ggplot:它什么时候不识别参数,什么时候识别参数? [复制]

    这个问题在这里已经有答案了 考虑以下两个函数 library ggplot2 testdata lt as data frame cbind rep c 1 4 each 50 rbinom 100 50 5 names testdata
  • 在 ARMv7 的上下文中,当 mmu 必须进行页表转换时,Linux 内核一对一映射内存的优势是什么

    Linux内核虚拟地址是一对一映射 所以通过减去一个PAGE OFFSET到虚拟地址我们将得到物理地址 就是那样virt to phys http lxr free electrons com source arch arm include
  • 如何使用Ajax和JSON制作下拉菜单?

    这是我用来显示类别菜单的代码OpenCart具有不同的级别 它有效 但每次点击后它都会产生越来越多的XHR finished loading POST and XHR finished loading GET有时通过单击来停止页面
  • HDINSIGHT hive,MSCK REPAIR TABLE table_name 抛出错误

    我有一个名为employee 的外部分区表 带有分区 年 月 日 每天都会有一个新文件出现在特定日期的位置 调用今天的日期 它将是2016 10 13 TABLE SCHEMA create External table employee
  • 在 ExpressJS + Reactjs 中传递数据以查看

    我有一个应用程序 其中一部分是用 Twitter 登录 成功登录后 我通常会将用户数据传递给模板 app get function req res next log The Home page has the user info req s
  • C# 依赖注入运行时(动态)注册

    我正在使用 VS 2017 和 NET Core 使用依赖注入 我想在运行时动态注册我的服务 我的目标是编写在单独的程序集中实现服务接口的服务实例 然后 服务名称 程序集名称将被添加到某种配置文件 或数据库表 中 我的注册代码会做这样的事情
  • OpenMP 中使用循环的并行部分

    我想知道是否有任何技术可以使用 for 循环在 OpenMp 中创建并行部分 例如 我不想创建 n 个不同的 pragma omp 部分 而是使用 n 次迭代来创建它们for loop每个部分都有一些变化的参数 pragma omp par
  • 如何处理具有不同布局的 Visual Studio 解决方案中的 Git 子模块?

    我们使用 Visual Studio 2010 C 进行开发 不久前从 SVN 迁移到 GIT 现在 我们尝试将我们的存储库 相当大 约 30 000 个文件 拆分为许多 git 存储库 每个解决方案一个 这些解决方案共享一些项目 主要是我
  • 无法让 Costura.Fody 工作,一直要求 DLL

    我已使用 nuget 包将 costura fody 安装到我的项目中 我已将 FodyWeavers xml 文件更新为
  • Binary(16) 字段截断 Guid 的尾随零

    在 C 中 我有一个byte 名为 UniqueId 的字段 我将此字段作为 Binary 16 存储在 SQL Server 数据库 EF6 中 我注意到有时 存储的 guid 是 15 个字节而不是 16 个字节 当我这样做时 这会导致
  • 从月份名称获取月份编号?

    快速问题 我有一个按名称列出的月份列表 即 Jan Feb Mar Apr 等 我想将其转换为 1 2 3 4 等 我已经写了一些简单的代码可以做到这一点 但只是好奇是否有人知道使用任何 API 来做到这一点的方法 快速回答 NSDateF
  • Memcached 使用超过最大内存

    我在 memcache 上安装了一个安装程序 我想在生产环境中使用它 但是当我运行了一些测试时 似乎 memcache 不会释放内存 即使它用完了所有分配的内存 我也登录了并运行了flush all命令 但对象仍在缓存中 这是一些测试的输出
  • 使用 CreateProcessAsUser 启动 url

    最近我遇到了一个问题 我需要从提升的应用程序打开网页 我需要以非提升方式打开浏览器 所以我环顾四周 发现这个解决方案 https stackoverflow com a 287072 127602 这肯定会解决我的问题 除了CreatePr
  • windows批处理文件eq此时出乎意料

    我正在编写一个 Windows 批处理脚本来安装服务 首先 我需要查找该服务是否已经存在 如果服务存在 它必须检查状态 如果状态正在运行 则必须停止并删除服务 这是我的代码 test bat 我正在从命令行运行它 for F tokens
  • 操作栏中的自定义主页图标 Sherlock

    我正在尝试使用设置主页图标的自定义图标ActionBarSherlock 库 http actionbarsherlock com 我尝试使用设置自定义布局abHomeLayout我的自定义主题中的属性 但这对我不起作用 唯一的方法 如何设
  • FieldValue.increment 不起作用,但添加“操作数”

    我正在使用 firebase 数据库和一个带有新功能的简单函数FieldValue increment https firebase google com docs reference js firebase firestore Field
  • 在 JavaScript 中执行继承

    现在 虽然我知道您不能像在 C 中那样执行继承 但我在互联网上看到它提到这是可能的 如果无法使用纯 JavaScript 代码 那么是否可以使用Ext JS http en wikipedia org wiki Ext JS如果是这样怎么办