apply() 的这种用法在 Javascript 中意味着什么

2023-11-26

请有人告诉我什么是this.init.apply(this, arguments)在下面的代码中做什么?

我明白什么apply()一般来说,但是在下面的代码的上下文中,它在那里做什么?

var Class = function() {

    var klass = function() {
        this.init.apply(this, arguments); //I don't really get this bit...
    };

    klass.prototype.init = function(){};

    return klass;
};

var Person = new Class;

//Usage
var someone =  new Person;

我看到很多人都在使用它。我知道它的作用,但无法真正实际操作,所以我需要更多的光线。

我要在 JS 中提升一个额外的级别,所以我想了解有关它的一切,而不仅仅是简单的“Hello world”级别。

非常感谢


apply is a 成员函数一个函数对象的。假设我们有:

function saySomething(thing, anotherThing) {
    alert(this + " says " + thing + " and " + anotherThing);
}

然后我们可以使用:

saySomething.apply(document, ["hello", "goodbye"]);

这将调用该函数并将数组的值作为参数提供给该函数。第一个参数指定了context函数的(或者,什么this等于函数运行时的值)。

您还应该知道arguments是一个特殊变量,它保存传递给函数的所有参数的数组。所以在这里,this.init.apply(this, arguments)意味着init函数被调用并传递了传递给函数的所有参数klass构造函数。

在实际实施中,我认为init会期待争论。考虑一下如果没有apply:

var klass = function(arg1, arg2, arg3) {
    init(arg1, arg2, arg3);
}

klass.prototype.init = function(arg1, arg2, arg3) {}

如果您想添加arg4要初始化,您需要将其添加到三个位置!有了klass透明地将其所有参数传递给init,你可以让你的代码变得不那么脆弱。

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

apply() 的这种用法在 Javascript 中意味着什么 的相关文章

  • 将一个文本框的内容复制到另一个文本框

    假设在文本框中输入了一个条目 是否可以在第二个文本框中保留相同的输入文本 如果是这样 这是如何完成的
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 如何使用 Google Sheets (v4) API 修改依赖于特定单元格的特定数据行?

    我想找到一种使用 Google API 根据我提供的条件修改特定行数据的方法 类似于 SQL 的东西 UPDATE Customers SET ContactName Alfred Schmidt City Frankfurt WHERE
  • 使用模态表单 ajax 超出 HTMLFormElement.toString 的最大调用堆栈大小

    我想使用模态窗口中的 ajax 请求提交表单 单击此链接可打开该模式 a class btn btn primary i class fa fa edit i Write a review a 模态窗口 div class modal fa
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • jQuery 验证规则和消息 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在设置 jQuery 验证的规则和
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • HTML colorpicker 发生变化时如何获取新值?

    我正在开发一个需要更改 HTML 颜色的网络应用程序canvas基于的价值观colorpicker 我有一个colorpicker在我需要获取的 HTML 中value从每次更新开始
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • Fancybox 画廊组

    我正在使用 fancyboxhttp fancyapps com fancybox http fancyapps com fancybox 我的问题是 我可以将不同的资源组合在一起吗 我的意思是同一画廊 或 组 中带有内嵌或视频的图像 如果
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script

随机推荐

  • 用另一个数据帧的值替换一个数据帧中的列值

    我有两个数据框 第一个有 1000 行 看起来像 Date Group Family Bonus 2011 06 09 tri23 1 Laavin 456 2011 07 09 hsg T2 Grendy 679 2011 09 10 b
  • 如何从 mysql 查询运行 python 脚本?

    我希望从 mysql 查询中调用 python 脚本 就像我们在 mysql 中调用过程一样 call procedurename 就像上面一样 mysql 有没有办法调用外部脚本 例如 call script somefile py 我写
  • Android 中的裁剪图片

    我已经尝试这个有一段时间了 我想从Bitmap 假设所需的壁纸尺寸为 320x480 源图像尺寸为 2048x2048 我不确定 裁剪适合 是否是正确的术语 但我想要实现的是获得与所需壁纸尺寸 320x480 具有相同比例的图片的大部分 所
  • XML 文档到字符串

    获取 XML 文档的字符串表示形式的最简单方法是什么 org w3c dom Document 也就是说 所有节点都将位于一条线上 举个例子 从
  • 如何制作圆形遮罩和剪辑GLSurfaceView?

    我使用的 SDK 提供了一个矩形GLSurfaceView通过回调 我希望能够以圆形布局渲染此视图 即 我想在圆形视图上显示视图 当我叠加时它显示圆形GLSurfaceView over ImageView GLSurfaceView ov
  • Nodejs 向带有 .p12 证书的 Web 服务发出请求

    所以 标题非常简单 我想使用一家公司的 Web 服务 并且我获得了 cer 和 p12 文件 据说 我在发出请求时应该使用 p12 我已经将 cer 导入到 Windows 中 我可以轻松地使用邮递员发出请求 但是当我尝试使用 node j
  • 如何区分鼠标滚动和 JavaScript 中以编程方式滚动?

    我通过更改滚动溢出的 DIV 内容scrollLeftJavaScript 中的属性 setInterval function scrollbox scrollLeft scrollbox scrollLeft 1 50 但是 我想在用户使
  • OpenCV Mat 数据成员访问

    我见过很多 OpenCV 代码 它们访问 a 的数据成员cv Mat直接地 cv Mat将指向数据的指针存储在unsigned char data成员 对数据成员的访问如下所示 cv Mat matUC 3 3 CV 8U int rowI
  • 作为参数传递时,Java 后自增 (++) 的行为不符合预期

    我遇到了以下问题 private void doStuff int i if i gt 10 return doStuff i public void publicMethod doStuff i 我希望这能运行doStuff10次 然后返
  • 如何在Python中保存和恢复多个变量?

    我需要将大约十几个对象保存到一个文件中 然后稍后恢复它们 我尝试将 for 循环与 pickle 和 shelve 一起使用 但效果不佳 Edit 我试图保存的所有对象都在同一个类中 我应该之前提到过这一点 并且我没有意识到我可以像这样保存
  • 如何在不加载 .dll 的情况下读取程序集清单

    本质上需要以编程方式读取依赖项 而不加载程序集本身 因为这样您就无法卸载它们 找到了这个 System Reflection Assembly ReflectionOnlyLoadFrom 路径 成功了
  • MSBuild OutputPath 属性和绝对路径

    我试图将 OutputPath 值设置为绝对路径
  • 单词中的序数 javascript

    有没有什么优雅的方法可以在js coffee中获取word格式的序数 像这样的东西 ordinalInWord 1 gt first ordinalInWord 2 gt second ordinalInWord 5 gt fifth 恐怕
  • FFMPEG 解码太慢(avcodec_send_packet() / avcodec_receive_frame())

    我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码 缩放和重新编码 我刚刚从源代码重新编译到 v3 3 2 并从旧的 avcodec decode video2 API 更改为新的发送 接收 API 新旧 API 解码视频的速
  • 如何解决 Windows 上的文件夹与 Git 的大小写冲突?

    我正在做一个git rebase 我被困住了 因为在一次提交中我有一个名为Proto 但在另一个提交中我有一个名为的文件夹proto 这是一个无心的错误 应该是Proto在这两种情况下 我在这里能想到的最好方法是尝试从两次提交中删除该文件夹
  • 如何从Mac上完全卸载symfony和composer

    我想从我的 Mac 上完全删除 symfony 和composer 我已经用谷歌搜索了五个小时 但没有找到关于如何从我的 Mac 上完全卸载 Composer 和 symfony 的文档 为什么这么难找 甚至在 Symfony 网站上 您计
  • 生成器在 C++20 视图管道中调用两次 [重复]

    这个问题在这里已经有答案了 在一个简单的管道中views适配器 有gen调用函数来生成一系列值 使用内部状态 然后对其进行过滤 令人惊讶和违反直觉的 至少对我来说 是这样的事实 生成器函数在每次迭代中被调用两次 因此对同一过滤器的下一次检查
  • 平台强制版本控制机制是java最需要的特性吗?

    作为开发人员 我经常对可以让您的生活更轻松的新语言功能感兴趣 例如 java 5 为该语言带来了泛型和注释 这些功能绝对可以提高您的工作效率 然而 当我回顾近十年在 java 平台上的工作时 我发现与版本控制相关的问题是效率低下和不必要的努
  • UTF-8 与 JPA 和 Glassfish 4.0

    我在处理 UTF 8 字符时遇到困难 这是一个简单的 JSF 项目 我使用 JSF 2 2 和 Glassfish 4 0 我有一个方法 em persist user 当我调试时 user getName 此时 我可以在 IDE 中看到
  • apply() 的这种用法在 Javascript 中意味着什么

    请有人告诉我什么是this init apply this arguments 在下面的代码中做什么 我明白什么apply 一般来说 但是在下面的代码的上下文中 它在那里做什么 var Class function var klass fu