论坛首页 Web前端技术论坛

无污染的 JavaScript 对象设计

浏览 9354 次
精华帖 (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!


还是那句话,多动手试试……

嗯 不错 果然可以
虽然是小聪明
0 请登录后投票
   发表时间:2008-07-25  
几点:

1. Array、Function、RegExp等是不能被继承的,因为有些特性无法继承(比如内置的[[call]]、[[length]])。

2. Array的污染其实不是很大的问题,因为for in枚举一般是只用于object的,而且是被当作map使用的object。

3. 用Frame得到一个sandbox是个不错的trick,但是跨frame的js行为是存在不确定性的,特别是IE上。
0 请登录后投票
   发表时间:2008-08-26  
indexOf之类的常用方法 还是喜欢直接在Array上追加。

另外 for (var in []) 遍历数组本来就有不少问题,for...in主要用于遍历简单对象的。(当作map用的那种)
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics