`

给javascript library挑挑刺

阅读更多
第一个观点:(js代码不仅仅是为了实现功能而且是拿来给程序员看的

我想,大家用js库的想法可能和我一样,

不仅是为了使用他,用用他的效果,而且想掌握他,掌握到“这个库和我写的一样”的程度,用着放心,

出问题也容易找,好解决,因为大家都知道“项目中是不允许说不”的。

如果要自己写,那就有很多制约因素,能力 ,经验,时间。

经验很重要,没有多年的web开发经验解决跨浏览器的问题就无从谈起。

java程序员干了一年多了,我一个初学者挑挑当前一些js库我所不满意的地方吧。

看prototype.js 最讨厌就是这段代码

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});


看源码的时候,一会map,一会collect的感觉很不好,至少我是这样的。

这时候感觉 python的 Only one way to do it 真好!

二是侵入比较厉害 这点可以看他的$方法 别的就不说了,很多时候是需要和美工合作的,容易出问题
  这个问题ext可能要好很多 因为他的element元素是直接包装了底层dom

三 变量污染,没有采用xx.yy.zz的方式来定义命名空间,容易被覆盖,一开始我满喜欢$的
  ext就有namespace方法,很方便得实现这点

四 oo方面 js里面 多态 我感觉也不是很重要 但是继承 重置 感觉还是比较重要的 封装嘛过得去就行了 ,prototype的实现是不是太粗糙了

五 prototype现在也是越来越庞大,我觉得js的api提供没必要非得像java一样保证以前发布的接口有效,没必要的东西应该直接清理掉,毕竟只是一个脚本而已。而且基于prototype的rico scriipt.。。也没让我看到完整的漂亮的demo

六 不知道是不是因为现在prototype的作者已经增加了不少 ,其风格也没以前这么简洁,很难想象 prototype这样简洁的基础语法,后来的发展是这样越来越庞大、冗余

    extends方法是针对对象的,用来进行属性拷贝覆盖的,属性可以使原始类型,可以是引用类型,所以就有传值传址的区分,在类的层次上使用, 会有比较隐晦的问题潜藏

ext:
    在别人基础总结经验这点就很好 ,但是非要搞adapter,野心太大,反正你自己侵入很小的 ,何必要这

样做 ext.lab里面几个东西自己实现一下不是很好吗 基于观点一 让我比较痛苦

    很多人说他代码风格好,我觉得不够,显得太烦琐了,特别是里面到处可见的each方法,比起prototyp的

Enumerable,感觉要差很多,里面的很多控件也给我感觉是多余留,除了树和表,还有些特殊的input输入

框,我感觉不到一些东西存在的必要性

再说说我们论坛的jsi,这方面的帖我投精华或者良好是因为他说的东西我不知道,特别是算法啊,语法啊,

俺门外的,感觉作者比较厉害,但是对jsi的观点和目前的作用,我觉得不是时候,出现一个好用js库是

当前首要的问题。

最后,很多人喜欢评价各个js库对xmlhttprequest的封装,我觉得没什么必要,前面这些问题解决得好的话,

自己封装xmlhttp只是很小的一个问题了。

欢迎大家一起挑刺,挑帖子挑js库都欢迎哦!



有链接的贴些链接也行 thanks
我打算持续编辑,暂时就想到这么点了



070521

这及天陆陆续续地找了一些js库的资料来学习,
有modello.js prototype.js jsvm jquery base2,ext,
我们论坛hexiaodong大侠的sigma
当然也不是很深入,总得来说还是觉得prototype.js是最容易理解的,
语法是最优美的,就oop来讲
很多文章都说prototype的实现不够好,而且都喜欢提到 实现private属性  public 属性
class.create方法,在prototype中也并不是没个类都这么用,能否加以修改,使之通用呢,我觉得这样不好,使用者思想上的顾虑是越少越好!
我的想法是这样的,在这个基础上再区分出 static 和 isntance 属性,
prototype的Object.extends方法,名字我觉得很好,OO的含义很明显,而且是针对对象的,我们可以这样调用Object.extends(Class ,{})也可以这样调用Object.extends(Class.prototype ,{})
这两种调用方式的第二个参数,能否加以处理来实现static private属性 和 instance private属性?
今天下班了 ,明天再实践了,各位有这样想过的吗?

070522

下面是prototype通过extend方法实现 静态私有属性
同理也可以实现 实例私有属性
欢迎提供意见
var Class1 = Class.create();
Object.extend(Class1,
(function(){
	
	var firstName = 'shen';
	var country = "china";
	return {		
		country:country,
		getCountry:function(){return Class1.country ;},
		getFirstName:function(){return firstName}	
	}
	
}
)()
);

Class1.prototype = {
	initialize:function(name){
		this.name = name;
	},
	getName:function(){
		return this.name;
	}
}

alert((new Class1('jianfeng008cn')).getName())
alert(Class1.country)
alert(Class1.getCountry())

alert(Class1.firstName);//不行的
alert(Class1.getFirstName())






分享到:
评论
18 楼 netfishx 2007-05-22  
sp42 写道

一直怀疑Jack是神不是凡人的说..

事实早已证明我的论断是完全正确滴
17 楼 sp42 2007-05-22  
jianfeng008cn 写道
bluepower 写道
netfishx 写道
加入ext教吧,jack大神仙福永享


呵呵,这句挺搞笑的

其实我感觉ext挺综合的,不仅js强,基于web标准方面做的挺好,在Ajax模式方面设计得也不错,所以综合实力优良


今天在ext的官网看到这么一句:

Ext is a fabulously slick GUI library which kicks the crap out of its competitors.
Dean Edwards (via Ajaxian)

神啊 jack大仙 不得不说


一直怀疑Jack是神不是凡人的说..
16 楼 jianfeng008cn 2007-05-22  
bluepower 写道
netfishx 写道
加入ext教吧,jack大神仙福永享


呵呵,这句挺搞笑的

其实我感觉ext挺综合的,不仅js强,基于web标准方面做的挺好,在Ajax模式方面设计得也不错,所以综合实力优良


今天在ext的官网看到这么一句:

Ext is a fabulously slick GUI library which kicks the crap out of its competitors.
Dean Edwards (via Ajaxian)

神啊 jack大仙 不得不说
15 楼 jianfeng008cn 2007-05-22  
笨笨狗 写道
个人觉得,js的封装库不应太复杂,Prototype这样的基础扩展就足够了,非要用java的观点来写js,不实际也没价值。


首先 你的观点我认可,但我重没说过要以java的方式来实现OOP哦,而且从我的帖子里我也不觉得从哪个地方可以看出我有这个倾向啊。

14 楼 笨笨狗 2007-05-21  
个人觉得,js的封装库不应太复杂,Prototype这样的基础扩展就足够了,非要用java的观点来写js,不实际也没价值。
13 楼 jianfeng008cn 2007-05-21  
hax 写道
第一个问题,别名这件事情见仁见智。我个人认为js库应该有一组默认的,然后希望使用另一套名字的,也可以通过导入一个别名列表来解决。参见第三个问题。

第二个问题,我不太明白你的意思。

第三个问题,确实如此,所以才有老金同志的jsi。我也有类似的项目pies(http://sourceforge.net/projects/pies)。

第四个问题,prototype的类体系确实比较弱,据说其作者有考虑采用dean edwards的base体系。不过换过来说,以ruby的方式,很多时候是使用mixin而不是继承的。就js本身来说,可能mixin也是一个更好的方式。

第五个问题,向前兼容确实有点麻烦,个人认为可以考虑抛弃,但是需要的人可以导入一个兼容模块就好了。这最好有一个比较好的命名管理体系做保证,参见第三个问题。

第六个问题,prototype确实庞大了,现在开始模块化了。这说明第三个问题越来越重要

最后关于jsi,我认为非常好,因为我也有相同思路 


第二个问题举个场景吧,如果ui写东西的时候用得是$()来得到元素,但是开发的不知道,用的是document.getelementbyid,这样一些操作会出问题的,如remove操作,因为prototype1.5$函数也做了修改,强制扩展了element,不是单纯的dom元素了。

你说得的确很有道理,但是请注意我用了“目前”这两个词,两位牛人目前有心做这个东西,我觉得你们不如写一个精良的js库来得更好,鉴于我这个帖子的观点一,我真没发现很好用的js库,
jsvm我也看了下代码,实在不是轻易能看明白的,先不论其思路多么先进,给予观点一,我也不认为是很好的js库,而且java语言用在脚本领域实在是拿大炮打小麻雀,类似的有j2class (java2js),对比之下我觉得prototype的语法是最棒的,最优美的,特别是enumerable,但是我觉得作为core,他没个部分包含的东西太多,我的观点是:我们只需要一个很轻量的core,可以舒服地表达我们的思想,当然一些浏览器差异相关的东西要帮我们封装好,另外的东西,在core之外提供一些可选的util就OK了。

我开这个帖子就是希望各个牛人能多谈一点对目前js领域这些js库的观点,抛砖引玉,希望大家多发言,给点有共鸣的链接也行,特别是针对世界上先进js oop的对比分析这类的。
12 楼 hax 2007-05-21  
BTW,我觉得这篇帖子讲js库,但是并没有列出足够多的js库。个人比较感兴趣的还有以下这些:

jquery, base2, mootools, jsvm等
11 楼 hax 2007-05-21  
第一个问题,别名这件事情见仁见智。我个人认为js库应该有一组默认的,然后希望使用另一套名字的,也可以通过导入一个别名列表来解决。参见第三个问题。

第二个问题,我不太明白你的意思。

第三个问题,确实如此,所以才有老金同志的jsi。我也有类似的项目pies(http://sourceforge.net/projects/pies)。

第四个问题,prototype的类体系确实比较弱,据说其作者有考虑采用dean edwards的base体系。不过换过来说,以ruby的方式,很多时候是使用mixin而不是继承的。就js本身来说,可能mixin也是一个更好的方式。

第五个问题,向前兼容确实有点麻烦,个人认为可以考虑抛弃,但是需要的人可以导入一个兼容模块就好了。这最好有一个比较好的命名管理体系做保证,参见第三个问题。

第六个问题,prototype确实庞大了,现在开始模块化了。这说明第三个问题越来越重要

最后关于jsi,我认为非常好,因为我也有相同思路 
10 楼 bluepower 2007-05-18  
netfishx 写道
加入ext教吧,jack大神仙福永享


呵呵,这句挺搞笑的

其实我感觉ext挺综合的,不仅js强,基于web标准方面做的挺好,在Ajax模式方面设计得也不错,所以综合实力优良
9 楼 netfishx 2007-05-17  
加入ext教吧,jack大神仙福永享
8 楼 neuhawk 2007-05-17  
难道用domquery
7 楼 sp42 2007-05-17  
jianfeng008cn 写道
neuhawk 写道
jquery怎么样?


jquery我没用过,但是我看他也是到处都是$ 而且我感觉jquery是调用简单,但是谈不上优美的语法了

同感。
据一些测评(是否权威不是很清楚),jquery效率上也没优势
6 楼 neuhawk 2007-05-17  
jquery的查询功能很不错。
5 楼 jianfeng008cn 2007-05-17  
neuhawk 写道
jquery怎么样?


jquery我没用过,但是我看他也是到处都是$ 而且我感觉jquery是调用简单,但是谈不上优美的语法了
4 楼 dennis_zane 2007-05-16  
prototype本身就是ruby生成的,带有浓郁的ruby风格,而ruby哲学与python正相反:many ways to do it
3 楼 jianfeng008cn 2007-05-16  
笨笨狗 写道
我觉得Prototype库已经很好用了,基于他实现OO特性完全足够


不是够不够的问题 而是好不好用的问题 该帖目的是挑刺啊
2 楼 neuhawk 2007-05-16  
jquery怎么样?
1 楼 笨笨狗 2007-05-16  
我觉得Prototype库已经很好用了,基于他实现OO特性完全足够

相关推荐

    javascript_library

    "javascript_library"这个主题涵盖了JavaScript库的使用,特别是与AJAX、JavaScript、JS以及RIA(Rich Internet Applications)相关的技术。以下是对这些概念的详细解释: 1. JavaScript(JS):JavaScript是一种轻...

    Cloudgamer JavaScript Library v0.1 JavaScript 工具库发布.zip

    Cloudgamer JavaScript Library v0.1 是一个专为游戏开发者设计的JavaScript工具库,旨在提升在云端游戏开发和运行的效率。此版本的库重点聚焦于优化和简化JavaScript代码,以便在Web环境中流畅地运行游戏。它可能...

    GoJS v1.5.0 JavaScript Library无水印

    GoJS v1.5.0 JavaScript Library for HTML Canvas Diagrams 自己修改把水印去掉 可以不购买官方js包

    jQuery is a fast and concise JavaScript Library

    jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the ...

    JavaScript Code Library.html

    学习JavaScript过程中的代码,方便以后敲代码的时候,可以直接使用

    closure library 模块化的javascript库

    Closure Library是Google开发的一个强大的、模块化的JavaScript库,旨在提供高效、可维护的代码解决方案。这个库被设计为可跨浏览器、跨平台使用,确保在各种JavaScript环境中的一致性。Closure Library的核心理念是...

    javascript-library:我的有用 JavaScript 函数库

    从压缩包的文件名称"javascript-library-master"来看,这是一个仓库的主分支(master分支)的副本,通常包含项目的源代码、文档、示例和测试等资源。如果我们要详细了解这个库,我们需要查看其源码文件,尤其是.js...

    BMap-JavaScript-library

    百度地图JavaScript开源库 百度地图JavaScript开源库是... 此外,欢迎广大的开发爱好者,基于百度地图API,提供你们制作JavaScript library库。我们也会放在这里供其他爱好者学习、交流。 热力图 提供热力图可视化

    GoJS去水印版v1.7.7 JavaScript Library for HTML Diagrams

    GoJS去水印版v1.7.7

    Learning Three.js: The Javascript 3D Library for WebGL.pdf

    ### 《Learning Three.js:The JavaScript 3D Library for WebGL》关键知识点解析 #### 一、书籍概述 《Learning Three.js:The JavaScript 3D Library for WebGL》是一本专为前端开发者撰写的书籍,旨在帮助读者...

    Jude JavaScript Library-开源

    **Jude JavaScript Library** 是一个开源的JavaScript库,专为IE5+和Netscape 6等较旧的浏览器版本设计。尽管这个库目前已经不再活跃,但它的设计理念和功能仍值得我们探讨和学习。 JavaScript库如Jude的主要目标是...

    JsonLibrary-4.26.zip

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它以文本形式存储和传输数据,易于人阅读和编写,同时也易于机器解析和生成。JSONLibrary则是一个专为解析和...

    oBIX Watch JavaScript Library-开源

    oBIX Watch JavaScript Library 是一个开源项目,旨在帮助开发者轻松地创建与oBIX兼容的Web应用程序,特别是针对建筑物管理系统的实时Web 2.0界面。 这个JavaScript库提供了丰富的功能,使得开发人员能够通过浏览器...

    Simple Library App using JavaScript with Free Source Code.zip

    总的来说,这个"Simple Library App using JavaScript"项目是一个很好的实践平台,涵盖了前端开发的基础知识,适合初学者了解和学习Web应用的基本构建。通过分析和修改源代码,可以深入理解JavaScript如何驱动动态...

    javascript-library:一个网站,您可以在其中添加书籍、将它们标记为已读或未读,以及动态删除它们而无需刷新页面。 用 Javascript 构建

    库 - Javascript Library in JavaScript 是一个实践项目,包括用户输入功能和管理动态 DOM 操作。我们使用 Javascript、HTML5、CSS3、Bootstrap 来实现它实时链接演示内置HTML5 CSS3 引导程序JavaScript入门要启动并...

    Learning Three.js The JavaScript 3D Library for WebGL(2nd) 无水印pdf 0分

    Learning Three.js The JavaScript 3D Library for WebGL(2nd) 英文无水印pdf 第2版 pdf使用FoxitReader和PDF-XChangeViewer测试可以打开

    基于Javascript和Vue的whu-library-seat武汉大学图书馆抢座软件设计源码

    本项目是基于Javascript和Vue的whu-library-seat武汉大学图书馆抢座软件设计源码,包含100个文件,其中包括35个JavaScript文件、22个PNG文件、13个Vue文件、12个Markdown文件、4个SCSS文件、2个YAML文件、2个SVG文件...

    JS_Library_20100826

    "JS_Library_20100826"是一个早期的JavaScript类库,由个人开发者在2010年8月26日创建。这个类库包含了作者自定义的一系列JavaScript函数和对象,旨在帮助简化JavaScript编程,尤其是涉及到动画效果的部分。在那个...

Global site tag (gtag.js) - Google Analytics