我在Object
添加了一些原型函数,我认为这些函数在某些情况下是实用的。但是,我注意到当我执行$ .get时,原型函数作为数据成员处理,并像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
我该如何避免这种情况?
答案 0 :(得分:2)
jQuery在传递的对象上运行for...in
循环,该循环遍历对象的所有可枚举属性,无论是否继承。它不会检查对象的属性是由对象拥有还是通过原型链继承。
此外,如果在对象序列化过程中遇到一个值为函数的属性,它将执行该函数并使用返回值。
有一些解决方案:
Object.prototype
。.hasOwnProperty(propertyName)
检查每个属性。Object.defineProperty()
(仅限ECMAScript 5兼容浏览器)使原型链上的属性不可枚举。答案 1 :(得分:1)
在你的情况下,如果你不想在函数中删除它,你应该将数据序列化(使用与jQuery serialize 类似的函数)到字符串并将其附加到URL。 / p>