关于理解绑定和继承的相关性

2023-12-07

今天我正在阅读 MDN 文档Function.prototype.bind()。在该部分下用作构造函数的绑定函数有一个例子我不太理解。

我在 Node.js (v.4.4.5) 和 Google Chrome (v58.0.3029.81) 中运行了以下代码

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function() { 
  return this.x + ',' + this.y; 
};

var p = new Point(1, 2);
p.toString(); // '1,2'

var emptyObj = {};
var YAxisPoint = Point.bind(emptyObj, 1/*x*/);

var axisPoint = new YAxisPoint(5);
console.log(axisPoint.toString()); // '1,5'

console.log(axisPoint instanceof Point); // true
console.log(axisPoint instanceof YAxisPoint); // true
console.log(new Point(17, 42) instanceof YAxisPoint); // true

我可以清楚地看到为什么axisPoint是两者的一个实例Point and YAxisPoint。但这世上怎能new Point(17,42)是一个实例YAxisPoint?


但这世上怎能new Point(17,42)是一个实例YAxisPoint?

Because instanceof与绑定函数(从创建的函数.bind()来电)。通常它会检查对象是否继承自构造函数.prototype,但绑定函数没有.prototype。相反,当您使用instanceof在绑定函数上,它检查该对象是否是目标函数的实例(即bind()被呼吁)。所以

… instanceof YAxisPoint

完全等于

… instanceof Point

您可以在规格中检查这一点(ES5, ES6).

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

关于理解绑定和继承的相关性 的相关文章

随机推荐

  • MIPS 组件,lui 0x1001

    我有一个作业 其中我必须解释有关以下 MIPS 汇编代码的一些内容 data x word 4711 y word 10 z word 0x0A91 e word 0 text globl main main lw 2 x lw 3 y l
  • 通过窗口名称访问窗口

    如果我使用打开一个窗口 window open myurl html windowname width 100 height 100 如何使用 窗口名称 引用新窗口 从打开它的同一页面 这个问题就是专门针对这个问题的 我知道我可以使用 va
  • 网络关闭时本地存储的上游数据不会在 JB 和 ICS 上的网络上发送(它们正在重新启动)

    这是我的场景 当网络中断时 GCM 客户端将设备到云的消息 上游 本地存储在本地队列中 其长度似乎为 20 尽管从未说明 当此队列已满时 消息将被本地丢弃 并且意图包含消息类型MESSAGE TYPE SEND ERROR 关于删除哪个 m
  • Sequelize 中的复数形式如何工作?

    使用时续集和阅读Sequelize 文档 我观察到有时型号名称使用单数 有时使用复数 有些通过关联自动添加到模型的方法具有单数形式 有些具有复数形式 1 Sequelize 如何计算复数 它只是在字符串后面附加一个 s 吗 2 如果我想使用
  • 使用 Google Caja 运行用户提供的 Javascript

    看来官方例子 use a caja js仅包含一个文件iframe从托管 caja 编译服务的服务器加载 URL 该服务又从某个 URL 获取输入 相关 API 可用here 然而 我真正想要的是安全地 并且重复地 运行用户提供的 Java
  • 如何实现 &Struct 的默认值?

    在多次阅读 Rust 书之后 我想我开始了解生命周期的要点 但对我来说 另一个问题是我们需要用来声明它们的语法 我发现这确实违反直觉 我将我的一段愚蠢的代码简化为这对结构 其中一个引用另一个 derive Debug Default pub
  • RemoteWebDriver 和 Grid - 是否可以获取服务器 IP?

    我使用 Selenium 2 和 Grid 中的 RemoteWebDriver 将测试划分到多个虚拟机上 假设我有两台 Linux 机器 在测试中我指定了在 Linux 机器上运行的功能 但我无法弄清楚正在使用这两台机器中的哪一台 有什么
  • SapUI5-平铺容器不工作

    由于某种原因 tilecontainer 无法工作 如果我放置一个列表而不是 Tiles 它工作正常 我正在尝试构建一个包含图块的简单应用程序 我是 SAPUI5 的新手 这是XML的代码
  • 如何从其父视图中删除带有圆角的 UIView?

    我正在为 3 2 及更高版本创建 iPad 应用程序 我的应用程序有一个覆盖视图 它具有半透明效果 使其下方的所有内容都变暗 在这个视图的中间 我在这个半透明的地方切了一个洞 让部分背景过滤器毫发无伤地通过 代码如下 void drawRe
  • 显示ArrayList的表

    我有一个main java有一个按钮 当您按下它时 它会调用一个方法并返回一个节点的 ArrayList 我想在表中显示 ArrayList Node 类中描述的 5 个字段 如何做到这一点 问题是显示一些列表类型的字段 Node java
  • Mercurial:检测到合并冲突时不会出现编辑器

    我想知道这里有人有在Ubuntu上运行mercurial的经验吗 我整个早上都在玩它 喜欢迄今为止所看到的一切 我遇到的一个问题是 当我进行合并并检测到冲突时 它不会自动在命令行编辑器中显示该文件以允许我解决冲突 它只是告诉我存在冲突 然后
  • 在 Spring 5 JPA findOne() 中获取 `Long 无法转换为 Example`

    我得到一个argument mismatch Long cannot be converted to Example
  • 如何让OpenCv显示两个颜色通道组合的图像?

    使用 OpenCV 从图像中获取一个颜色通道的输出并不困难 而且可以轻松完成 但是否有可能从图像的三种主要 BGR 颜色中 我想直接使用函数看到仅绿色和红色组合而不是蓝色的图像 因此 我可以通过将所有蓝色值设置为 0 来执行上述操作 然后查
  • Tomcat 7 不断给我一个 404。我做错了什么?

    这是我的第一个 servlet 这是它的代码 import javax servlet import javax servlet http import java io public class Ch1Servlet extends Htt
  • 按键事件无反应

    我正在QT上写文章 OpenGL已连接 工作正常 但keyPressEvent和mousePressEvent事件不响应击键 class MainWindow public QGLWidget Q OBJECT protected void
  • 为 EditText 实现文本观察器

    我有一个编辑文本 当我点击它时 它变得可聚焦 我将输入要输入到 EditText 中的输入文本 我想为 EditText 实现一个监听器 这样当我停止输入时 它应该自动将该文本保存到数据库中 而不是有一个按钮 如何让 EditText 有一
  • COM+ 组件调用其他 COM+ 组件 - “无法加载类型”

    我有两个 NET 程序集 它们注册为 COM 组件 并且我正在从常规控制台应用程序测试工具中测试它们 Dim objFirst As New MyFirstComponent COM initialisation Dim RC As Boo
  • 如何将 Glass Fish 服务器与适用于 Java EE 的 eclipse luna 结合使用?

    我认为当您安装适用于 Java EE 的 Glass Fish 工具时 Glass Fish 服务器会随 Eclipse 一起提供 然而 在尝试安装Glass Fish工具后 它说没有什么可更新的 好的 所以当我尝试启动服务器时 它会要求服
  • 变量声明和内存分配

    我想知道局部变量声明过程中是否分配了内存 假设我在函数内编写这段代码 整数a 10 内存已分配 值 10 已存储在其中 关于什么int a 这个声明语句会分配4个字节的内存吗 Thanks 局部变量通常存储在堆栈上 因此实际上分配了字节in
  • 关于理解绑定和继承的相关性

    今天我正在阅读 MDN 文档Function prototype bind 在该部分下用作构造函数的绑定函数有一个例子我不太理解 我在 Node js v 4 4 5 和 Google Chrome v58 0 3029 81 中运行了以下