Object.prototype.toJSON = function(){
return JSON.stringify(this);
}
({a:1}).toJSON();
为什么不行?
首先感觉这个方法的名字应该叫toJsonString,而不是坑爹的toJSON
至于你的方法不执行,是因为在你的代码中a:1,a只是个label,({a:1})的返回值是1,而不是你预期的json对象
改为({'a':1})
哥们,你先搞懂什么是json把,瞎起哄
@liujiangfeng007: 何出此言啊
因为toJSON 是jquery 的一个方法了。
改个方式:
Object.prototype.toJSon = function(){
return JSON.stringify(this);
}
({a:1}).toJSon();
调试的图片如上
具体代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body>
</body> </html> <script type="text/javascript"> alert(typeof JSON.stringify); alert(JSON.stringify({a:1})); if (typeof Date.prototype.toJSON == 'function') { alert("日期类型已经有toJSON方法了"); }
Object.prototype.toJson = function(){ return JSON.stringify(this); }
alert({a:1}.toJson());
////////////////////////
Object.prototype.toJSON = function(){
return JSON.stringify(this); }
var str2={a:2,b:2}.toJSON();//报 堆栈溢出 </script>
------------------------
首先在IE8及以上浏览器等其它高版本的浏览器才支持JSON.stringify这个方法(本测试在IE8上做的)。
这段代码依次会弹出:
function
{"a":1}
日期类型已经有toJSON方法了
{"a":1}
然后出错,提示
SCRIPT28: 堆栈溢出
新建文本文档.html, 行27 字符1
SCRIPT2343: 堆栈溢出,位置: 第 27 行
多调试几次你就会发现问题的所在。
所以楼主prototype的toJSON方法不行,老是提示堆栈溢出,是因为javascript JSON对象的源代码中有些对象已经有toJSON这个方法了(会弹出“日期类型已经有toJSON方法了”就能说明已存在了),源代码中已有的方法我们最好不要和它命名一样。
一楼回答的代码是正确的,但是它并不是因为与jquery的方法名相同,是javascript本身中的一些对象已有这个toJSON方法了,再加上转成json字符串是有可能要递归的,你覆盖了一些toJSON方法所以提示“堆栈溢出”,楼主把方法改个名字吧(在测试代码中改成toJson就是可以的)!
最后建议最好不要直接用JSON.stringify这个方法,因为有些版本的浏览器不支持的,所以最好用jquery的,第三方的,或自己封装一个方法。
图片不清楚,重新上传一下
不瞒你说,上面都不是什么好回答。tojson现在只有高级浏览才支持,你可以下载一个json2来支持所有浏览器。
你说的是 JSON.stringify JSON.parse 吧
@|WinKi|: 只有sb才去扩展object
@Coolicer:
2货,别人的问题就是需要扩展,Object.prototype.toJSon,虽然扩展Object是不好,但别人问的问题显然不是这个。别人都用上JSON.stringify了,你才叫别人下载json2.
@|WinKi|: 我才懒得跟你吵。在浏览器没支持的情况下,怎么用。不下载json2,哪里有这个方法,真是的。
@Coolicer:
IE8+,FF3.5+,safari4+,opera10.5+,chrome 都支持 , 如果还用比这些版本还低的话,那确实只能下载json2
你是不是想用原型的方式来拓展JSON.stringify?