在构造函数内分配原型

2023-11-23

我有这个代码:

var MyClass = function(b) {
    this.a = b;
    this.getA = function() {
        return that.a;
    }
}

var SecondClass = function(b) {
    this.prototype = new MyClass(b);
    this.getB = function() {
        return 6;
    }
}

var a = new SecondClass(2);
console.log(a.getA());

输出告诉我 a 没有名为 getA() 的方法

我假设在 SecondClass 的构造函数中执行 this.prototype = new MyClass() 会导致它继承 MyClass 的方法?

我确信有更好的方法可以做到这一点,但我正在尝试理解原型关键字的行为。


prototype是一个特殊的财产构造函数,不属于instance.

当你调用构造函数时new Func(),引擎将创建一个继承自的新对象Func.prototype然后设置this在构造函数内部引用新对象。

所以,除了this.prototype作为普通财产,继承在转让时就已经发生了。

Since you are not assigning any methods to MyClass.prototype, you don't have to do anything with prototype inheritance here. All you have to do is apply MyClass to the newly created instance using .call [MDN]:

var SecondClass = function(b) {
    MyClass.call(this, b);
    this.getB = function() {
        return 6;
    }
};

但是,您应该将实例共享的所有方法添加到原型中然后让每个实例SecondClass继承它。完整的设置如下所示:

var MyClass = function(b) {
    this.a = b;
}
MyClass.prototype.getA = function() {
    return this.a;
};

var SecondClass = function(b) {
    // call parent constructor (like 'super()' in other languages)
    MyClass.call(this, b);
}
// Setup inheritance - add 'MyClass.prototype' to the prototype chain
SecondClass.prototype = Object.create(MyClass.prototype);
SecondClass.prototype.getB = function() {
    return 6;
};

var a = new SecondClass(2);
console.log(a.getA());

所有这些在 ES6 中会变得更容易.

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

在构造函数内分配原型 的相关文章

随机推荐

  • Terraform ELB access_log S3访问权限问题

    当我尝试为我的 elb access log 创建 s3 存储桶时 我遇到了 terraform 问题 出现以下错误 Error applying plan 1 error s occurred module elb author dev
  • 编译器能否将隐式声明的虚拟析构函数的实现放在单个单独的翻译单元中?

    以下代码编译并链接Visual Studio 2017 年和 2019 年 permissive 但不与任何一个编译gcc or clang foo h include
  • 在运行实例中切换到 Composer 模式

    如何轻松地将现有项目切换为 Composer 该项目现已从 6 1 更新到 8 7 并且应该在 Composer 中运行 全新的作曲家设置不是问题 对于上一个项目 我创建了一个新主机 通过 Composer 安装了 TYPO3 通过 Com
  • 如何更改屏幕方向,而不在Android上创建新的活动?

    不知道标题是否正确 事情是这样的 我有一个应用程序在手机和平 板电脑上的工作方式不同 在手机上它显示为纵向 在平板电脑上显示为横向 为了实现这一目标 我创建了一个名为 CoreActivity 的类 它由我的所有活动扩展并执行以下操作 pu
  • roslyn 编译器未使用 msbuild 复制到 AspnetCompileMerge 文件夹

    我有一个 NET MVC 项目 我正在尝试使用 Jenkins 进行部署 我一直让 Jenkins 运行 msbuild 然后使用 RoboCopy 复制生成的文件 我想切换为仅使用发布配置文件 发布配置文件在使用 Visual Studi
  • 根据内容调整 RichTextBox 的大小

    此代码根据 RichTextBox 的内容自动调整其大小 我遇到了问题 尤其是表格 t可能会被忽略 我尝试了托管解决方案 现在我正在尝试平台调用 电流输出 DllImport gdi32 dll static extern bool Get
  • 在 VueJS 中配置 Get、Post、Patch 全局标头的最佳方法

    我是 VueJs 的新手 我正在寻找在 VueJS 中为 Get Post Patch 配置全局标头的最佳方法 即使用方便 安全性强 目前我只是把它写在export default 对于每个组件 我知道这非常糟糕 所以我请求你们帮忙 感谢
  • 如何使用LDAP对用户进行密码验证?

    我正在编写一个客户端应用程序 使用OpenLDAP库 用户通过 LDAP 服务器进行身份验证 以下是无法比较用户的 userPassword 的硬编码示例程序 include
  • 页面加载后删除 div 时发生 jQuery 冲突

    我正在尝试从页面中删除一个div 最好完全阻止它加载 但现在我决定在页面加载后将其删除 当我尝试以下代码行时在jsFiddle中 the content正如预期的那样 div 被删除 但是 我也尝试过实施它一个实际的网站 但在这种情况下 c
  • Camera.getPicture 不是 ionic 3 中的函数

    我正在使用相机插件单击离子应用程序中的图片 但出现以下错误 OrdercancelPage html 24 ERROR TypeError Object is not a function at Camera getPicture inde
  • Unity构造函数注入其他参数

    我有一个带有构造函数的类 如下所示 public BatchService IRepository repository ILogger logger string user 在我的 DI 引导程序类中 我有以下内容RegisterType
  • 切换 python 打印的最佳方法是什么?

    我在游戏引擎中运行 Python 2 4 并且希望能够在需要时关闭所有打印 例如 我希望在调试版本中打开打印 然后在发布版本中关闭打印 它还必须尽可能透明 我在引擎的 C 代码中对此的解决方案是printf里面的函数vararg宏 并将其定
  • 从 Google Places API (Swift 3) 获取附近地点的列表

    我知道已经存在类似的威胁 但是exact我正在寻找的主题似乎没有被触及 我是一个编程新手 但是 我成功地运行了一个应用程序 它可以获取您当前的位置 将坐标转换为地址 并能够将您的位置数据存储在 tableView 中 现在我正在寻找一种方法
  • Html 锚标记 onclick() 和 href 同时执行

    如同HTML 锚链接 href 和 onclick 两者 帖子 我的是 a href tmp download mp3 Download link a The update 方法将向服务器发送另一个 HTTP GET 方法来更新已下载的文件
  • MATLAB 是否优化 diag(A*B)?

    假设我有两个非常大的矩阵A M N 和B N M 我需要的对角线A B 计算完整的A B需要 M M N 次乘法 而计算它的对角线只需要 M N 次乘法 因为不需要计算最终位于对角线之外的元素 MATLAB 是否实现了这一点并进行即时优化d
  • 如何更改log4j中的htmllayout

    我想更改Java中log4j的htmllayout 5列 时间 线程 级别 类别 消息 我的 log4j properties 是 log4j rootLogger DEBUG Console File log4j appender Con
  • org.apache.catalina.LifecycleException:子容器在启动期间失败

    SEVERE A child container failed during start java util concurrent ExecutionException org apache catalina LifecycleExcept
  • Spring - 无法解析 MVC“视图”thymeleaf

    我有一个简单的HomeController class package com example tacos import org springframework stereotype Controller import org spring
  • 获取 C 时区的夏令时转换日期

    在 C 中 是否有一种简单的跨平台方法来检索给定时区开始和结束夏令时的日期 我已经有了时区偏移信息以及当前是否正在观察夏令时 但我确实需要夏令时开始和结束的日期 对于我无法控制的外部依赖项 在 Windows 中 我正在使用获取时区信息 t
  • 在构造函数内分配原型

    我有这个代码 var MyClass function b this a b this getA function return that a var SecondClass function b this prototype new My