javascript - PrototypeJS 版本 1.6.0.2 覆盖 JSON.parse 和 JSON.stringify 并破坏 socket.io 功能

标签 javascript json node.js socket.io prototypejs

基本上,socket.io 使用 nativeJSON 来编码和解码数据包,我的问题是我不得不使用这个改变 JSON 行为的原型(prototype)版本。当我应该进入服务器时:

socket.on('事件', function (a, b, c), 我得到 socket.on('event', function ([a, b, c], undefined, undefined).

一个解决方案是在 json.js 上注释这行:

/* socket.io-client/lib/json.js
if (nativeJSON && nativeJSON.parse){
    return exports.JSON = {
      parse: nativeJSON.parse
    , stringify: nativeJSON.stringify
    };
  }
*/

但是这个改变会严重影响性能。

有没有办法恢复原生 JSON 功能? 是否可以创建一个隐藏的 iframe 来克隆 JSON 对象以恢复旧功能?

最佳答案

一种解决方案是终止 Prototype 的 toJSON() 扩展方法:

if(window.Prototype) {
    delete Object.prototype.toJSON;
    delete Array.prototype.toJSON;
    delete Hash.prototype.toJSON;
    delete String.prototype.toJSON;
}

那么您应该能够毫无问题地使用浏览器的 native JSON.parse/stringify 方法。

关于javascript - PrototypeJS 版本 1.6.0.2 覆盖 JSON.parse 和 JSON.stringify 并破坏 socket.io 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236026/

相关文章:

java - 使用 REST assured 进行 JSON 验证

node.js - 在 Docker 中使用 Yarn 从私有(private)注册表安装包

javascript - 使用 CSS 将 Muses 广播播放器居中

javascript - 如何将货币符号与货币值分开并保留小数点和逗号?

javascript - 通过 Ajax 加载 Wordpress 帖子

javascript - Sequelize 文档更新

javascript - Node.js puppeteer - 如何从表中仅获取某些(过滤器)记录

javascript - 致命的 : Could not read from remote repository npm install

ios - 如何访问嵌套结构中的值

javascript - 如何读取带有坐标的 json 文件并将它们绘制在 map 中?