锁定老帖子 主题:无污染的 JavaScript 对象设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-16
笨笨狗 写道 csf178 写道 以前try抛出来个安全异常
现在try了 结果是IE的Array2==Array为true FF抛异常 麻烦try出来的同学贴个代码看看 且不说这个解决方案严重依赖宿主环境超级无聊 以前试图用这个观察Ucren的函数来的 失败了就没再看过 麻烦你仔细看看上面我给出的链接,然后再自己动手试试看,Dean Edwards大人可不是盖的,这个方法人家用到了Base2库里面…… http://dean.edwards.name/weblog/2006/11/hooray/ // create an <iframe> var iframe = document.createElement("iframe"); iframe.style.display = "none"; // write a script into the <iframe> and steal its Array object document.body.appendChild(iframe); frames[frames.length - 1].document.write("<script>parent.Array2 = Array;<\/script>"); alert(Array2 == Array); // => false Array2.prototype.each = function(iterator) { // iterate}; var list1 = new Array(1, 2, 3); list1.each(print); // => ERROR! var list2 = new Array2(1, 2, 3); list2.each(print); // => 1, 2, 3// hooray! 还是那句话,多动手试试…… 嗯 不错 果然可以 虽然是小聪明 |
|
返回顶楼 | |
发表时间:2008-07-25
几点:
1. Array、Function、RegExp等是不能被继承的,因为有些特性无法继承(比如内置的[[call]]、[[length]])。 2. Array的污染其实不是很大的问题,因为for in枚举一般是只用于object的,而且是被当作map使用的object。 3. 用Frame得到一个sandbox是个不错的trick,但是跨frame的js行为是存在不确定性的,特别是IE上。 |
|
返回顶楼 | |
发表时间:2008-08-26
indexOf之类的常用方法 还是喜欢直接在Array上追加。
另外 for (var in []) 遍历数组本来就有不少问题,for...in主要用于遍历简单对象的。(当作map用的那种) |
|
返回顶楼 | |