万恶的prototype
来源:互联网 发布:51单片机c语言教程全集 编辑:程序博客网 时间:2024/05/17 06:00
今天进行JS调试的时候,发现一个很奇怪的问题,本来运行好好的脚本,突然就异常了。于是try-catch了一下,抓出了异常。异常
内容如下:
TypeError: Object function (filter) { return JSON.stringify(this, filter); } has no method
'replace'
奇怪了,怎么会有这个异常?我明明没有引用这个方法呀!蛋疼无比!
于是在Chrome中按F12果断开调试,跟来跟去,发现是一段将INI文件转换成JSON出错了。主要代码如下:
for(var section in iniTree)
for (var key in iniTree[sectionName]) {
var value = iniTree[sectionName][key].replace(/[\r\n]/, '');//异常出现的地方
Config[sectionName][key] = value;
}
}
出问题的地方是发现了,可这个是由于什么地方引起的呢?我想到,之前曾能引用过JSON.js,于是猜测会不会是JSON.js里改变了
object的原型链?
于是将异常中的return JSON.stringify(this, filter);拿来搜索,果然发现有一段改变object原型链的代码。其代码如下:
if (!Object.prototype.toJSONString) {//The method will pollute object.
Object.prototype.toJSONString = function (filter) {
return JSON.stringify(this, filter);
};
Object.prototype.parseJSON = function (filter) {
return JSON.parse(this, filter);
};
}
这里Object.prototype.toJSONString和Object.prototype.parseJSON 改变了object的原型链。而object是全局的,会影响到所有
的object。而我前面的iniTree就是了个object,所以立即将这段代码屏蔽掉,再运行,OK了。
问题解决了,回过头来想想,prototype原型链是挺好用的,但是链接到object时,一定要小心。尤其是在引用其他开源的库时,更
要格外小心,因为有的库是使用prototype的原型链来运作的,而这极有可能会影响到全局。
所以prototype好用是好用,但要慎用。
- 万恶的prototype
- 万恶的Makefile,万恶的记事本。
- 万恶的BOM,万恶的微软
- 万恶的食堂
- 万恶的百度竞价排名
- 万恶的javabean
- 万恶的双休
- 万恶的押宝游戏~
- 万恶的STL错误
- 万恶的IIS+ASP
- 万恶的DM
- 万恶的C语言
- 万恶的夏令时
- 万恶的android API
- 万恶的SimpleDateFormat
- 万恶的英语
- 万恶的document啊
- 万恶的ie6
- location of the android sdk has not been setup in the preferences
- treeview递归
- hibernate二级缓存
- (13)字符串哈希
- android OTA 的功能实现和修改
- 万恶的prototype
- 估值:难点、解决方案及相关案例(原书第2版)
- Priority_queue优先队列
- WordPress代码和分析-页面模板是从哪里来的
- struts2 中的日期格式化输出
- C语言中extern关键字详解
- VC中使用ADO调用存储过程实现方法
- 实验四十七微软应用程序虚拟化之二APP-V Sequencer 5.1服务器部署和创建第一个Office虚拟应用程序包
- dropdown gridview