你能向被劫持的 JavaScript 数组添加一个函数吗?

2024-06-03

这个问题与在 Javascript 中声明数组时应遵循哪些最佳实践? https://stackoverflow.com/q/11500492/508537


假设有一个客户,我们就称他们为客户“D·B·库珀” http://en.wikipedia.org/wiki/D._B._Cooper,第一个要求是以下代码必须在任何其他 JavaScript 代码之前运行:

Array = function(){
    alert('Mwahahahaha');
};

此外,Cooper 要求必须将自定义函数添加到内置函数中。Array对象(不是被劫持的对象)。例如,如果Array未被劫持,这将通过以下方式完成:

Array.prototype.coolCustomFunction = function(){
    alert('I have ' + this.length + ' elements!  Cool!');
};

这将负担:

var myArray = [];
myArray.coolCustomFunction();

然而,这与第一个要求不兼容。那么,如何才能最好地满足 D. B. Cooper 的两个要求呢?

Note:D B。甚至写了测试小提琴 http://jsfiddle.net/briguy37/yXPJ8/帮助确保解决方案满足他的要求......真是一个人!


Update:对于那些喜欢挑战的人:请尝试找到一个不可劫持的跨浏览器解决方案来解决这个问题。例如,here's http://jsfiddle.net/yXPJ8/9/一个更加被劫持的测试用例(感谢重新格式化此 Bergi),它劫持了 Array、Object、Array.prototype.constructor 和 Object.prototype.constructor。到目前为止,看起来可能有一个特定于浏览器的解决方案(请参阅Bergi 对他的回答的评论 https://stackoverflow.com/a/11527758/508537,并让我们知道您是否找到了在 FF 中劫持它的方法),但目前尚不清楚是否有跨浏览器的解决方案。


无论你的Array函数/构造函数是,数组的字面语法将始终生成“真实”数组,并将其 [[prototype]] 设置为本机数组原型对象(一次,此是一个安全漏洞 https://stackoverflow.com/questions/11500492#comment-15231480)。因此,您始终可以通过使用来访问它

Object.getPrototypeOf([])

even if Array or [].constructor被劫持。 (当Object被劫持了,那么事情就变得非常复杂)

(带来了 D.B.向下! http://jsfiddle.net/yXPJ8/6/)


如果您想使用解决方法,in FF https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/Proto以下行将始终有效(并且不可劫持):

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

你能向被劫持的 JavaScript 数组添加一个函数吗? 的相关文章

  • 可以跨 iframe 共享 javascript 导入吗?

    我有一个 Web 应用程序 其中有多个 iframe 它们都需要导入相同的 javascript 库 例如 jquery 有没有办法只加载一次并以某种方式在所有 iframe 之间共享该数据 我不想让我的页面加载缓慢 因为它为每个 ifra
  • 使用 IE 11 和 AngularJS 的 2 路数据绑定问题

    我最近在使用 AngularJS 的 Web 应用程序上构建了一个功能 但在 IE 11 上遇到了一些问题 apply 将数据更改写入 DOM 由于某种原因 这种情况仅有时发生 而当我尝试调试问题时却从未发生 这使得它看起来像是一个计时问题
  • 角度单元格 xlsx 着色

    我有一个问题 我想根据一个值在我的 exel 行中添加红色或绿色来下载 如何在工作表中设置指定单元格的颜色 这是处理 exel 格式的 ts 类 表达 import Injectable from angular core import a
  • 使用字符串的二维数组

    我被一些未评分的作业困住了 它是为了练习 我必须创建一个名为的函数find name这需要 2 个参数 第一个参数是一个二维名称数组 字符串 第二个参数是一个字符串 用于在二维数组中查找名称 如果找到 该函数必须返回 1 否则返回 0 当我
  • 获取访客的 Optimizely A/B 测试和变化

    当我在网站上运行实验时 我希望能够找出当前访问者看到的测试和变体 我无法找到如何做到这一点优化Javascript API https www optimizely com docs api 您可以获得第一个正在运行的实验的 ID 假设您有
  • 使用 mongoDB 插入子文档

    我收集了以下文件 id 2 workspace name 1 widgets name 2 widgets name 3 widgets name 4 widgets 我怎样才能插入 id 1 blabla blabla 在 小部件 中的
  • jQuery:“$(this).next().next()”有效,但“$(this).next('.div')”无效

    好吧 我正在尝试将这组信息单独隐藏 这有效 arrow click function this next next slideToggle img class arrow src https via placeholder com 40 h
  • 有效 JSON 上的 Firefox JSON“格式不正确”错误

    我在 Firefox 中收到以下错误消息 Error not well formed Source File http school courses booking add php 1287657494723 Line 1 Column 1
  • 在 Javascript 中隐藏按钮

    在我最新的程序中 有一个按钮 单击时会显示一些输入弹出框 这些框消失后 如何隐藏按钮 You can set its visibility财产 http www w3schools com cssref pr class visibilit
  • 通过标记或JS强制下载

    假设我在 CDN 来自 Rackspace 的云文件 上有一个文件 以及一个包含该文件链接的静态 html 页面 有什么方法可以强制下载此文件 以防止它在浏览器中打开 例如 mp3 我们可以让我们的服务器读取该文件并将相应的标头设置为 he
  • 为什么 jQuery 对损坏标记的解释与浏览器不同?

    我之前已经回答过这个问题 https stackoverflow com a 19101905 1253312 但我并不完全理解why答案是正确的 答案的要点 p p function jqrender html a href http w
  • Angular 4 - 具有动态参数值的自定义验证器

    我编写了一个自定义验证器 用于检查日期是否高于某个最小日期 代码如下所示 export function validateMinDate min Date ValidatorFn return c AbstractControl gt if
  • GraphQL 错误字段类型必须是输入类型,但得到:

    这是突变 const createNotebook mutationWithClientMutationId name CreateNotebook inputFields token type GraphQLString details
  • 在 Javascript 中实现 Zobrist 哈希

    我需要在 Javascript 中为国际象棋引擎实现 Zobrist 哈希 我想知道实现此目的的最佳方法是什么 现在 我不是计算机科学家 也从未上过正式的算法和数据结构课程 所以如果我在这方面有点偏离 我很抱歉 据我了解 我需要一个 64
  • 在 Bootstrap 选择器上使用 jQuery 取消选择选项

    我对一些 UI 元素使用 Bootstrap SelectPicker 它允许用户选择多个选项并将其呈现在段落标签中的屏幕上 他们还应该能够删除选定的选项 这是我的代码 用于将选定的选项渲染到屏幕上 以便每个选项旁边都会显示一个 X 单击它
  • 将“http://”添加到尚未包含“http://”的 URL 前面

    我有一个input保存 URL 的字段 我希望这个保存的输入能够识别变量开头不存在 Http 但不知道从哪里开始 是否可以仅检查字符串的一部分 然后有一个在必要时追加的函数 如果您还想允许 https 我会使用如下正则表达式 if http
  • 在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容

    在 JavaScript 中 如何测试一个数组是否包含另一个数组的元素 arr1 1 2 3 4 5 8 1 10 2 3 4 5 9 function name arr1 gt true 没有 set 函数可以执行此操作 但您可以简单地执
  • 为什么我的数据没有存储到我的 Firebase 实时数据库中?

    我正在尝试为网络应用程序制作一个注册页面 这会将数据发送到 firebase 数据库 我已阅读官方 firebase 文档并按照说明写入数据 但什么也不会写 在我的数据库控制台中 它显示的所有内容都是空 而不是我的数据 我没有收到控制台错误
  • Javascript - HTML Canvas 上的 Gecko 边框半径自适应(CSS border-radius)

    我试图弄清楚如何将 border radius css 属性的行为重现到 HTML 画布中 所以我已经在 J avascript 中做了一些事情 以便使用特定的半径 对于每个角 来计算给定形状的正确边界 如果需要的话 这是上一个问题 Gec
  • 如何拦截javascript中innerHTML的变化?

    我需要拦截网页内单元格内容的任何更改 以下代码显示 addEventListener 不起作用 function modifyText alert var el document getElementById mycell el inner

随机推荐

  • 如何使用chrome扩展文件系统api?

    嗨 作为例子 我想阅读 c x txt as text 和写 有关于 chrome fileSystem 的例子吗 注意 我不想向用户询问文件的路径 已经回答于Chrome 扩展 HTML 文件系统访问 https stackoverflo
  • 如何在 EditorTemplate 中获取完全限定的成员名称?

    我有一个 ASP NET MVC 4 站点 我将嵌套属性传递给 EditorTemplate 并使用构建字段名称ViewData ModelMetadata PropertyName但是 这获取子属性的属性名称 而不是我正在编辑的属性的完整
  • 如何更改字体的元数据(特别是标题)?

    我需要一种动态更改字体名称的方法 但在 net 中找不到这样做的方法 我不关心字体文件类型 所以otf fon ttf都打开 我尝试过的事情 使用 dsofile dll OleDocument 属性读取器 这些与访问字体名称的任何内容所使
  • 通过右值引用获取参数的所有权

    我想明确的是我的类的构造函数A将取得通过的所有权Data范围 显而易见的事情是采取unique ptr按价值 class A public A std unique ptr
  • 使用 Python 合并 JSON 数据

    作为 Python 程序的一部分 我想合并包含相同结构数据的 JSON 对象 例如 responseStatus SUCCESS responseDetails total 5754 data id 1324651 id 5686131 我
  • 更改 Jumbotron 不透明度并使其全宽,而不影响字体和按钮

    想问一下如何更改 Jumbotron 不透明度并使其全宽而不影响字体和按钮的不透明度 jumbotron special text align center background attachment scroll background i
  • 如何将 .attr("id") 存储在变量中

    你们以前非常有帮助 我已经在 stackoverflow 上搜索了一段时间 但找不到答案 希望这是一个简单的问题 我试图将当前悬停的 div 的 id 存储在变量中 然后 我想使用该变量来切换具有相同 id 的图像 您可以看到 我尝试将变量
  • knockoutjs 在 foreach 绑定中单击绑定

    编辑 问题与绑定无关 而是与一个简单的 JavaScript 错误有关 我有一个关于 foreach 绑定中的单击绑定的问题 我有一个列表 其中的项目显示一个下拉框 用于从主数据中选择一个值 可以在该列表中添加和删除项目 用于删除项目的按钮
  • 以编程方式使用 Spring 安排作业(动态设置固定速率)

    目前我有这个 Scheduled fixedRate 5000 public void getSchedule System out println in scheduled job 我可以更改它以使用对属性的引用 Scheduled fi
  • 如何从java代码中检测操作系统语言(区域设置)

    从java代码中了解操作系统语言 区域设置 的正确方法是什么 我努力了 Locale getDefault System getProperties user language 但它们并不正确 实际上没有显示 系统区域设置 可以通过 Win
  • 根据列值拆分数据框

    我有一个像这样的数据框 EndDate 2007 10 31 0 2007 11 30 0 03384464 2007 12 31 0 0336299 2008 01 31 0 009448923 2008 02 29 0 2008 03
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • 如何通过批处理脚本检查进程是否正在运行

    如何检查应用程序是否正在从批处理 以及 cmd 文件运行 如果程序已经在运行 我不需要启动另一个实例 我无法更改应用程序以使其仅作为单个实例 该应用程序还可以以任何用户身份运行 我想到的另一种可能性 不需要保存文件 灵感来自于使用grep
  • 将“this”指针传递给析构函数中的其他类/函数

    在某些主对象的析构函数中在堆栈上创建工作对象并传递this主对象指向辅助对象的指针 然后 辅助对象还将调用主对象的成员函数或访问成员变量 换句话说 下面的C 是合法的吗 struct MasterClass MasterClass int
  • 如何使 JTable 中的列对于 Swing Java 不可见

    我设计了一种 GUI 其中使用了一个 JTable 我必须从中隐藏 2 列 我该怎么做呢 去除TableColumn来自TableColumnModel TableColumnModel tcm table getColumnModel t
  • 使用操作栏主页作为向上按钮,主页活动savedInstanceState始终为null

    活动A 点击按钮 gt 活动B 当按下后退按钮时 不会重新创建 Activity A 当按下 home 向上按钮时 将重新创建 Activity A 所以我在 A onSaveInstanceState Bundle outState 时保
  • 标准 C++ 中的共享递归互斥体

    有一个shared mutex http en cppreference com w cpp thread shared mutex计划用于 C 17 的课程 和shared timed mutex http en cppreference
  • 捕获传入和传出的肥皂请求

    我有一个 C 控制台应用程序 它调用基于 SSRS Soap 的 Web 服务 服务在远程计算机上运行 我想捕获传入和传出的肥皂请求 如何才能做到这一点 Thanks 这只是为了调试目的吗 如果是这样 Fiddler http www fi
  • 在小于 O(n) 的时间内检查凸多边形交集?

    我有 2 个凸多边形 2d 我想检查这 2 个多边形是否相交 事实上 我会多次移动和旋转多边形 所以我也可以做一些预计算来获得这个问题的快速答案 我正在寻找一种低复杂度的算法 我知道可以检查一个点是否位于 O log n 的凸多边形中 我想
  • 你能向被劫持的 JavaScript 数组添加一个函数吗?

    这个问题与在 Javascript 中声明数组时应遵循哪些最佳实践 https stackoverflow com q 11500492 508537 假设有一个客户 我们就称他们为客户 D B 库珀 http en wikipedia o