论坛首页 Web前端技术论坛

无污染的 JavaScript 对象设计

浏览 9355 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-14  

偶还是不死心,我试试看能不模式化实例继承(扩展).

其实这个帖子是

http://www.iteye.com/topic/214285

 

这个帖子的技术基础,我继续试试有没有模式化实例的方法.

0 请登录后投票
   发表时间:2008-07-14  
achun 写道

偶还是不死心,我试试看能不模式化实例继承(扩展).

其实这个帖子是

http://www.iteye.com/topic/214285

 

这个帖子的技术基础,我继续试试有没有模式化实例的方法.


又稍微看了一下 以前我也研究过类似的 你这东西用来搜索不错 相当于以原型方式高速复制对象

可以代替数组的slice提高搜索效率

0 请登录后投票
   发表时间:2008-07-14  
我打算放弃了,
因为我发现自己犯了一个显著的错误,
就是JavaScript对非值类型总是引用的(当然也有特例,就是固有对象的prototype成员).
因此我还是不要费这个力气了,还是用常规手段吧.
现有的研究得到的技巧,在使用中灵活运用就行了.
0 请登录后投票
   发表时间:2008-07-14  
csf178 写道
笨笨狗 写道
其实,要解决这个问题,如果你不嫌麻烦,可以在同一个页面上生成一个隐藏的iframe,然后,扩展这个iframe里面的Array对象,并使用它来生产你要的数组实例,这样就能保证你父页面的原型纯净……

但是,就我看来,for..in语句本来就不是专门设计供迭代数组的,而是列举对象可迭代成员的语法,所以,Prototype的设计也是合理的,当然,这是个人观点,其实也是Prototype的设计哲学之一。

这个其实是不允许的 你可以try一下


这不是我说的,你可以自己去看看Dean Edwards的介绍,或许,你真的没有try就断章取义了?

http://dean.edwards.name/weblog/2006/11/hooray/


在没有自行研究的前提下,不要随便否定别人的观点说法……
0 请登录后投票
   发表时间:2008-07-14  
Every JavaScript environment (i.e. a browser window or iframe) has its own copy of the core JavaScript objects and classes. What if we “borrow” one of those objects?
0 请登录后投票
   发表时间:2008-07-14  
笨笨狗 写道

这不是我说的,你可以自己去看看Dean Edwards的介绍,或许,你真的没有try就断章取义了?

http://dean.edwards.name/weblog/2006/11/hooray/


在没有自行研究的前提下,不要随便否定别人的观点说法……

嘿嘿,果然早有人用过这种方法,
英文不好,就是不行呀,总要看到中文的解释才会去看,自己搜到了,一大堆英文,自己也很难硬着头皮看.
0 请登录后投票
   发表时间:2008-07-14  
以前try抛出来个安全异常
现在try了 结果是IE的Array2==Array为true
FF抛异常 麻烦try出来的同学贴个代码看看

且不说这个解决方案严重依赖宿主环境超级无聊
以前试图用这个观察Ucren的函数来的 失败了就没再看过
0 请登录后投票
   发表时间:2008-07-14  
什么都可以污染,就是别污染Object
0 请登录后投票
   发表时间:2008-07-15  
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-16  
可以使用自定义一个类,对你需要扩展的东东进行包装。
再加入你所需要加入的function或属性.
0 请登录后投票
论坛首页 Web前端技术版

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