gpt4 book ai didi

javascript - $.get 在请求 URL 中发送原型(prototype)函数?

转载 作者:行者123 更新时间:2023-11-28 21:26:47 24 4
gpt4 key购买 nike

我在Object中添加了一些原型(prototype)函数,我认为这些函数在某些情况下很实用。但是,我注意到,当我执行 $.get 时,原型(prototype)函数被作为数据成员处理,并像 http://...?prototypefunc=false 那样发送。

这是相当无用的,因为我不提供这些作为数据成员,但它们添加到查询字符串中。

准确地说,我有这段代码:

Object.prototype.in = function() {
for(var i=0; i<arguments.length; i++)
if(arguments[i] == this) return true;
return false;
}

$.get('http://localhost/test.php', {'test': 'foo'}, function(text) { });

构造的对应URL为:

http://localhost/test.php?test=foo&in=false

如何避免这种情况?

最佳答案

jQuery 对传递的对象运行一个 for...in 循环,该循环遍历对象的所有可枚举属性,无论是否继承。它不会做任何检查来查看对象的属性是否由该对象拥有或通过原型(prototype)链继承。

此外,如果在对象序列化过程中遇到值为函数的属性,它将执行该函数并使用返回值。

有几种解决方案:

  • 更改您的代码,使其不会修改 Object.prototype
  • 传递字符串而不是对象,或使用您自己的代码将对象序列化为字符串。
  • 用您自己的函数覆盖 jQuery.param() 函数,并强制它使用 .hasOwnProperty(propertyName) 检查每个属性。 .
  • 使用 Object.defineProperty() 使原型(prototype)链上的属性不可枚举(仅限 ECMAScript 5 兼容浏览器)。

关于javascript - $.get 在请求 URL 中发送原型(prototype)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com