上两篇介绍了原型对象和原型链:
JavaScript对象创建模式:http://blog.csdn.net/hongse_zxl/article/details/44595809
深入理解JavaScript的原型对象 :http://blog.csdn.net/hongse_zxl/article/details/44622997
原型对象是JavaScript模拟类并实现继承的灵魂。这一篇介绍两个典型的问题:原型污染和猴子补丁
原型污染 Prototype Pollution
先看个例子:
function Person() { } //先定义个空函数(空函数也有对应的原型对象)
//原型对象中声明两个方法,一个count,一个otherFunc
Person.prototype.count = function() { //count方法统计原型对象中有多少个属性和方法
var i = 0;
for (var prop in this) { i++; }
return i;
};
Person.prototype.otherFunc = function() { }; //随便定义个空方法,起名叫otherFunc
var p = new Person();
p.name = "Jack"; //为对象添加两个属性name和age
p.age = 32;
alert(p.count()); //4
有了前两篇的基础,应该能明白为何最后结果为4,而不是2。对象p有两个属性name和age,而Person是个空函数,预想应该返回2才对。但实际结果返回了4,枚举时将