扩展函数原型

2023-12-03

我希望能够扩展javascript中的函数原型(也就是说,向所有函数添加一个函数)。 目的是将其转换为一种格式,以便在另一种语言(即 ruby​​,它只能通过字符串进行通信[在这种特定设置中])之间进行交换。我已经有了一个系统,因此我可以通过定义一个来传递其他类型to_jsruby 对象上的方法和to_rubyjavascript 对象上的方法,就像这样

Number.prototype.to_ruby = function () { return this.toString(); }

这适用于我想要的其他一切,但不适用于功能。我can通过执行以下操作使其在 Chrome 中工作:

_empty = function() {};
_empty.__proto__.to_ruby = function () {
    return 'JSFunction.new(' + this.toString().to_ruby() + ')';
};

但这在IE中不起作用(这是系统的要求)。

我知道我有一个对象通过 ID 或类似的方式跟踪函数,但我不能保证它们将与创建它们的同一实例一起使用。

其他一切都失败了,我可以编写一个函数来处理特殊情况(即,isFunction(instance) ? fn_to_ruby(instance) : instance.to_ruby(),但如果可能的话我宁愿保留这个模型。


正如 Slace 所说,您可以通过将方法添加到Object.prototype,但这并不是真正的犹太洁食,因为它可能会影响写得不好的 for..in 循环。

您可以通过以下方式将其添加到函数中Function.prototype:

Function.prototype.to_ruby = function() {
  return this.toString();
}

然而,有一条一般规则是您不应该修改内置对象,主要是因为您永远不知道它什么时候会回来困扰您(例如,新版本的 ECMAScript 实现了同名的属性)。也许你最好写一个toRuby功能:

function toRuby(obj) {
  return obj.toString();
}

但你也可以使用+运算符与字符串连接以调用toString隐式方法:

'' + obj; // returns obj.toString()

这将返回与上述完全相同的结果。你的选择。

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

扩展函数原型 的相关文章

  • 单击输入[复选框]的标签将触发父级单击事件两次(淘汰)

    考虑这把小提琴 http jsfiddle net 9rkrahm6 我有一个
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构

随机推荐

  • JDialog 允许用户仅更改对话框的宽度

    有谁知道是否可以限制用户调整 JDialog 大小的方式 我知道我可以调用方法 setResizible boolean 并禁用或允许用户调整 JDialog 的大小 但是有没有办法限制用户更改窗口的高度但允许他更改宽度 如果我创建的对话框
  • 如何正确实现从 iOS 应用程序到 watchOS2 并发症的设置传输

    我想要实现的目标如下 并发症以 30 为间隔在后台更新 分钟 每当手表应用程序运行时 并发症都会更新 并且 接收自己的更新数据 并发症随时更新 iOS 应用程序运行并且用户更改了影响的设置 观察数据 例如天气观测位置的变化 或 显示单位 第
  • Nodejs AWS SDK S3 生成预​​签名 URL

    我正在使用 NodeJS AWS SDK 生成预签名的 S3 URL 该文档给出了生成预签名 URL 的示例 这是我的确切代码 省略了敏感信息 const AWS require aws sdk const s3 new AWS S3 AW
  • 使用变量设置 Dask Worker

    我想在工作人员加载时分发一个更大的对象 或从磁盘加载 并将其放入全局变量 例如calib data 这对 Dask 工作人员有用吗 好像是客户端方法注册工人回调在这种情况下可以做你想做的事 你仍然需要某处放置你的变量 因为在 python
  • 如何在Python中删除文件或文件夹?

    如何在Python中删除文件或文件夹 使用以下方法之一 pathlib Path unlink 删除文件或符号链接 pathlib Path rmdir 删除一个空目录 shutil rmtree 删除目录及其所有内容 在 Python 3
  • 在 Google Tasks API 中使用 Joda-Time 库将字符串转换为日期时间格式

    我有一个日期 时间字符串需要发送到 Google Tasks API 但我不知道如何转换乔达时间图书馆DateTime对象转换为 Java DateTime 对象 我使用 Android 作为平台 该字符串以 2012 07 19 22 0
  • 数组:每个键存储多个值

    我曾经尝试使用相同的键添加两个值 但它不起作用 它超越了旧的价值 是否可以使用相同的键添加多个值 并且在按键检索时 我会得到一个链接列表 我可以迭代该列表以获取所有不同的值 最简单的选择 无论您使用什么地方 array key 替换为 ar
  • Python:获取 URL 路径部分

    如何从 url 获取特定路径部分 例如 我想要一个对此进行操作的函数 http www mydomain com hithere image 2934 并返回 这里 或对此进行操作 http www mydomain com hithere
  • Azure 移动服务 Web Api 上的 SignalR CORS

    我有一个运行 Web Api 和 c 的 Azure 移动服务 并按照中的建议启用了 CORS在 Azure 移动服务 NET 后端启用 CORS然而我现在开始将 SignalR 添加到其中 SignalR 工作正常 但我无法找到如何启用
  • 触发器中的 pragmaautonomous_transaction

    我在一个表上编写了一个触发器 该触发器根据条件从其他表中删除数据 触发器具有 pragmaautonomous transaction 并且触发器按预期工作 但是 我确实想知道将来是否会出现任何问题 比如说数据是否由多个用户 源同时插入等等
  • 防止 D3 中的文本剪切(Javascript 图表)

    我正在 D3 中绘制饼图 但文 本剪辑本身遇到问题 这是我的绘图函数 pie function config var width config width 840 height config height 520 radius Math m
  • jQuery mobile:URL 查询字符串不改变

    我正在使用 jQuery Mobile 并遇到了一些 对我来说 奇怪的行为 我有一堆链接 每个链接都指向同一个 jQM 页面 otherpage 但 URL 查询字符串具有不同的值 例如 otherpage q foo otherpage
  • 如何检测 RichTextBox 中的多行粘贴

    目前我正在开发一个简单的语法荧光笔 但有几个问题 你能帮我一下吗 我有一个类库 其中有一个组件类 一切都在 VB NET 中 这只是一个文件 所以你可以在这里看到它https gist github com 2366507 第 92 行有
  • php hook 核心函数

    我想在执行 或替换标准核心函数之前挂钩 例如我要阻止这两者include and require访问任何脚本 有什么方法可以在没有任何额外的 dll 的情况下实现它吗 或者另一个案例is array myarr 我会勾住array myar
  • Swing 重叠组件

    我在框架中有两个 AWT 组件 面板 A 和面板 B 我希望面板 A 的大小适合框架的高度宽度 并在调整框架大小时保持该大小 但我希望面板 B 与 A 重叠 B 将处于固定位置 0 0 以使其更容易 具有固定的高度和宽度 我不确定需要什么样
  • 实例化一个派生自 MonoBehaviour 的类[重复]

    这个问题在这里已经有答案了 有没有办法实例化从 MonoBehaviour 派生的类 例如下面的示例 而不会收到警告 您正在尝试使用 new 关键字创建 MonoBehaviour 这是不允许的 MonoBehaviours 只能使用 Ad
  • 如何删除/切换元素上的悬停类(单击时翻译)而无需再次移动鼠标?

    如果您单击但不移动鼠标 您将看到按钮的颜色保持为红色 我想要完成的是在您单击并且不移动鼠标后它仍然会删除 切换 hover class jsFiddle 上的示例 function var Btn button Btn hover func
  • CosmosDB + 分组依据

    我需要使用 GROUP BY 条款Azure 数据资源管理器但我认为是不支持的 有人有解决或避免分组的想法吗 此致 最后 Azure Cosmos DB 目前支持GROUP BY在 NET SDK 3 3 或更高版本中 目前尚不支持其他语言
  • Twilio webhook 短信响应格式

    我在我的应用程序中使用 Twilio 并且我有 SMS Webhooks 其中我的 SMS 号码配置了 URL 一切正常 除了 Twilio 在每个请求的日志中向我发送错误 我认为我的应用程序的响应格式不正确 但我在文档中找不到如何使用 J
  • 扩展函数原型

    我希望能够扩展javascript中的函数原型 也就是说 向所有函数添加一个函数 目的是将其转换为一种格式 以便在另一种语言 即 ruby 它只能通过字符串进行通信 在这种特定设置中 之间进行交换 我已经有了一个系统 因此我可以通过定义一个