锁定老帖子 主题:无污染的 JavaScript 对象设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-14
|
|
返回顶楼 | |
发表时间:2008-07-14
achun 写道
可以代替数组的slice提高搜索效率 |
|
返回顶楼 | |
发表时间:2008-07-14
我打算放弃了,
因为我发现自己犯了一个显著的错误, 就是JavaScript对非值类型总是引用的(当然也有特例,就是固有对象的prototype成员). 因此我还是不要费这个力气了,还是用常规手段吧. 现有的研究得到的技巧,在使用中灵活运用就行了. |
|
返回顶楼 | |
发表时间:2008-07-14
csf178 写道 笨笨狗 写道 其实,要解决这个问题,如果你不嫌麻烦,可以在同一个页面上生成一个隐藏的iframe,然后,扩展这个iframe里面的Array对象,并使用它来生产你要的数组实例,这样就能保证你父页面的原型纯净……
但是,就我看来,for..in语句本来就不是专门设计供迭代数组的,而是列举对象可迭代成员的语法,所以,Prototype的设计也是合理的,当然,这是个人观点,其实也是Prototype的设计哲学之一。 这个其实是不允许的 你可以try一下 这不是我说的,你可以自己去看看Dean Edwards的介绍,或许,你真的没有try就断章取义了? http://dean.edwards.name/weblog/2006/11/hooray/ 在没有自行研究的前提下,不要随便否定别人的观点说法…… |
|
返回顶楼 | |
发表时间: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?
|
|
返回顶楼 | |
发表时间:2008-07-14
笨笨狗 写道 这不是我说的,你可以自己去看看Dean Edwards的介绍,或许,你真的没有try就断章取义了? http://dean.edwards.name/weblog/2006/11/hooray/ 在没有自行研究的前提下,不要随便否定别人的观点说法…… 嘿嘿,果然早有人用过这种方法, 英文不好,就是不行呀,总要看到中文的解释才会去看,自己搜到了,一大堆英文,自己也很难硬着头皮看. |
|
返回顶楼 | |
发表时间:2008-07-14
以前try抛出来个安全异常
现在try了 结果是IE的Array2==Array为true FF抛异常 麻烦try出来的同学贴个代码看看 且不说这个解决方案严重依赖宿主环境超级无聊 以前试图用这个观察Ucren的函数来的 失败了就没再看过 |
|
返回顶楼 | |
发表时间:2008-07-14
什么都可以污染,就是别污染Object
|
|
返回顶楼 | |
发表时间: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! 还是那句话,多动手试试…… |
|
返回顶楼 | |
发表时间:2008-07-16
可以使用自定义一个类,对你需要扩展的东东进行包装。
再加入你所需要加入的function或属性. |
|
返回顶楼 | |