Peaceful mind Where there is a will, there is a way!

15Jun/090

初学jsolait

知道jsolait,还是在看以前的一个php开源项目Sugar CRM时,当时愣是没能看明白里面的jsolait是啥回事,所以偶一直怀恨在心,想着将来某一天报仇雪恨.今天下午到jsolait.net上晃悠了一圈,对jsolait有了几点肤浅的认识,还望个位扔砖. jsolait的目的就是用简单的类和模块处理机制来增强javascript的oop功能.我们知道,javascript的面向对象一直是个娘胎里面带出来的老毛病(^_^,刚考完研,时不时还要飙几句政治语言,毛主席评价中国民族资产阶级就是这样说的),而jsolait的出现就是为javascript增加了一些面向对象的思想(至于是不是真正的面向对象,我还不敢枉加评论).要了解jsolait,一个很重要的概念就是模块,模块可以理解为一个.js文件,在jsolait1.0中已经提供了很多默认的模块,对于初学者来说,了解jsolait/init.js和jsolait/lib/codec.js就可以对jsolait的功能有个大致的印象.jsolait.net上面的例子就是基于这2个模块构建的,另外用到了一个自定义的模块tutorial.js.有了模块后,接下来就是怎么用的问题了,jsolait对模块的引用要求特殊的顺序关系(用它的话说,All module scripts depend on the initialization script init.js to be loaded first,就是说init.js相当于一个基类,因为它提供了一个importModule方法,你要引用其它模块对象,必须使用这个方法的),首先引用的一定是jsolait/init.js(大家一定要记得用绝对路径),引用的格式是:,我感到奇怪的是为什么在这个引用中间加alert('ddd')不会产生任何的输出,难道是type的缘故?因此你在写脚本测试的时候,又要用以前熟悉的方式.至于jsolait如何定义模块,类,函数,如何实现继承,对象初始化.大家可以参照jsolait.net上的例子自己熟悉下,我想强调的是jsolait的语法真的是相当的晦涩难懂,比如你定义模块时: Module("tutorial", "0.0.1", function(mod){ -----模块内容------- }) 定义函数时: mod.testCodecs = function(data){ ----函数体---------- } 定义类时: mod.SomeClass=Class(function(publ){ publ.foo = function(p1){ return this.bar * p1; } publ.bar = 3; }) 你看大括号和括号的使用简直是乱七八糟的,定义模块/类的时候要把括号放在大括号的后面,定义函数的时候就不用括号了,这和我们c++中那种使用简直是感觉一个在天堂一个在地狱了...此外,这三者之间的关系大家也应该有个清楚的认识,模块是最大的,类其实定义在模块中的,函数即可以定义在模块中也可以定义在类中,虽然我上面是分开写的.,最后都要归到用模块来访问这些方法和函数.关于jsolait中的异常处理和模块依赖方面的内容jsolait.net没有提及,希望知道的同仁提供几个好的学习站点.

Tagged as: No Comments