JavaScript 和继承

2024-02-26

说我有一个Class:

function Foo() {
  this.foo1 =  null;
  this.foo2 = function() { return false;};
}

我希望其他对象继承它的变量和函数。

function Bar(){}
function Baz(){}

然后实例化我的对象:

var bar = new Bar();
bar.foo1   // returns null
bar.foo2() // returns false

什么是正确的功能include Foo in Bar and Baz?


我已经做了Bar.prototype = new Foo();但它似乎在我们心爱的 IE (


如果将所有属性附加到原型(这是最好的,至少对于方法而言),

function Foo() {}

Foo.prototype.foo1 = null;
Foo.prototype.foo2 = function() { return false;};

然后将父级的原型分配给子级的原型就足够了:

function inherit(Child, Parent) {
    var Tmp = function(){};
    Tmp.prototype = Parent.prototype;
    Child.prototype = new Tmp();
    Child.prototype.constructor = Child;
}

inherit(Bar, Foo);

这里我们使用了一个中间构造函数来“解耦”两个原型。否则,如果您要更改其中一个,您也会更改另一个(因为它们引用同一对象)。这种方式实际上非常流行并且被一些库使用。

如果没有,您必须在子构造函数中调用父构造函数:

function Bar() {
    Foo.call(this);
}

这是您始终应该做的事情,将构造函数中设置的属性分配给当前对象。


对你的方式的补充说明:

Bar.prototype = new Foo();

this should工作(实际上也在 IE 中),但它有两个主要缺陷:

  • All the 实例属性设立于Foo将成为所有人共享的财产Bar实例。

  • What if Foo需要一些仅在创建时才可用的参数Bar实例?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 和继承 的相关文章

随机推荐

  • Laravel 以数组形式获取翻译文件的内容

    你能帮我解决以下问题吗 我需要将翻译文件的内容作为数组获取 无论它是否是PHP文件或一个JSON file 假设我的项目中有以下结构 laravel project resources lang en es file1 php file2
  • QueryDSL 与注释处理器的 Gradle 配置

    我搜索了很多关于配置的信息QueryDSL with Gradle 我想配置注释处理器 以使用特定的注释 Generated在生成的类上 但我只能在这里找到这个链接 Gradle 无法生成 QueryDSL 类 https stackove
  • 在 winform C# 中加载 asp.net 网站

    我有一个 n MDI Windows 窗体应用程序 它包含两种形式 一种形式 测量数据 控制引擎 另一种形式 实验室 应显示我的 asp net 网站 该网站有各种任务供用户执行 如何在该实验室表单中显示 asp net 默认页面 我在用着
  • Oracle:是否可以为模式创建同义词?

    Firstly 我是一个oracle新手 并且我没有当地的oracle大师来帮助我 这是我的问题 问题 我有一些 SQL 脚本必须发布到多个 Oracle 实例 这些脚本创建存储过程 创建存储过程的架构与包含存储过程从中读取的表的架构不同
  • 在 PYOMO 中为 2 个变量定义特定值集

    我正在尝试使用多个变量分配材料属性 例如 密度和电导率是材料 1 材料 2 和材料 3 的两个决策变量 我必须输入以下信息 density of material 1 1000 density of material 2 2000 dens
  • 使用 Spring Boot 异步自定义 ThreadPoolTask​​Executor

    我有一个 Spring Boot 应用程序 负责通过 REST 应答请求 我还推送有关我的应用程序调用的指标 由于这是一项单独的任务 并且我必须立即响应用户 因此我希望异步发布该指标 所以我用过 ThreadPoolTaskExecutor
  • C# 中的双按位非 (~~)

    我一直在读ThreadLocal
  • 我可以在 DDD 中拥有“不完整”的聚合吗?

    DDD 规定您只能通过实体的聚合根来访问实体 举例来说 你有一个聚合根 X 它可能有一个lot子 Y 实体的数量 现在 对于某些场景 您一次只真正关心这些 Y 实体的子集 也许您将它们显示在分页列表或其他内容中 那么是否可以实现一个存储库
  • 如何修复 oh-my-zsh 插件无法工作的问题

    我刚刚发现了 oh my zsh 但我无法让它工作 虽然主题可以完美地工作 但插件却不能 我选择了一些插件 例如 macports 但我既没有完成端口命令 也没有适当的别名工作 这是我的 zshrc Path to your oh my z
  • 使用 React 在 Material UI 对话框中形成表单

    我正在尝试让一个表单在 Material UI Dialog 组件中工作 如果我将对话框包装在表单标签中 它们甚至不会出现在生成的 html 中 还不知道为什么
  • 有 HTML5 注册机示例吗?

    我很难理解如何使用
  • 比较 Struts2 标签中的字符串

    我有一个index jsp页面 其中某些元素根据用户是否登录而打开 关闭
  • Laravel MIME 验证

    我遇到了一个麻烦 关于使用 Laravel 验证 JavaScript 文件的上传 其中验证规则是 javascript file gt required mimes js 据我所知 这应该有效 因为 Laravel 使用mime cont
  • 在 Android 中将应用程序上下文放入静态方法的最佳方法

    我正在开发一个具有多个活动的 Android 应用程序 其中我有一个带有几个静态方法的类 我希望能够从不同的活动中调用这些方法 我使用静态方法通过 XmlResourceParser 从 xml 文件加载数据 要创建 XmlResource
  • Coinbase Python API 上的分页

    我正在尝试获取 Coinbase 帐户上的所有交易 这需要分页 这文档 https developers coinbase com api v2 javascript pagination关于如何在 Python 中执行此操作的信息很少 但
  • 如何使用 Selenium 和 C# 删除元素属性?

    下面是我想要从中删除 disabled disabled 并关闭开发工具窗口的html块 我正在使用 selenium webdriver 和 c 谢谢 a class btn btn success href Click to Submi
  • 集合是确定性的吗? [复制]

    这个问题在这里已经有答案了 当阅读诸如此类的问题时从 python 中的列表中获取唯一值 https stackoverflow com questions 12897374 get unique values from a list in
  • Process的Exited事件没有发生?

    在我的应用程序中 我打开一个 Excel 工作表以向用户显示我的 Excel 文档之一 但在显示 Excel 之前 我将其保存到本地计算机中的一个文件夹中 该文件夹实际上将用于显示 当用户关闭应用程序时 我希望关闭打开的 Excel 文件并
  • 如何用 Unicode 表示上标斜杠?

    有什么办法可以用 Unicode 写上标斜杠吗 我的目标是以比123 456 789 那么 unicode 充满了字符 其含义取决于其解释 对于上标斜杠 您可以使用 加拿大音节最终急性 https unicode table com en
  • JavaScript 和继承

    说我有一个Class function Foo this foo1 null this foo2 function return false 我希望其他对象继承它的变量和函数 function Bar function Baz 然后实例化我