前两天看到MooTools的新版本有一个新东西——Hash,说是依照Dean Edwards的第二条军规加入的。左思右想觉得有点奇怪,写一个javascript lib怎么可能去实现一个hash算法呢?今天好奇的看了一下代码,orz…也难怪blog上的Eric Rogé大哥会有那样的疑问。对此疑问之后有两个解释,第一个还算合情合理,第二个就有问题了,而且口气也很霸道啊,这个Hash只是封装了一个Object,但是Dean所说的问题仍然存在:
Object.prototype.aaa = function(){};
var hash = new Hash({});
hash.length; //==1
hash.hasKey("aaa"); //true
//or let's put it this way...
var hash = new Hash({});
Object.prototype.aaa = function(){};
hash.length; //==0, length may only increase when Hash.set is invoked
hash.hasKey("aaa"); //true
所以呢,问题好像还是没解决,任何时候Object.prototype被践踏了都会影响Hash的正确性。
历史评论