`
chrnc
  • 浏览: 9688 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

json 使JavaScript code 更加OO

阅读更多
就个人理解JavaScript 既不是完全面向对象的,也不是完全的面向过程的,参半吧。
单纯的用JavaScript 写一个类估计都能会,伪装个java util类也没啥问题。

这个文章说的切入点是这样的:
JavaScript --> ajax --> some service --> 返回 到JavaScript 。

常见的返回数据的方式有:
1)返回数据由ajax框架来伪装成 JavaScript 类 ;
2)返回lang类型的 数据,直接编程JavaScript的弱类型数据来使用。

没有反对上面两种方式的意思,现在给出我自己的方式:
例:现在要返回这样一个结构的数据:
final class VO {
 String strs[][] = {null,{"sdf",null},{"sdf","ggds"},{"wer","saw"}};
 
 String name = "nameStr";
 int age = 12;
 String sysLoginID;
 String password = "sdf";
 
}



要返回这个VO 的instance 的数据给 JavaScript ,我的做法比较折中,既不转换成伪类,也不返回简单的lang类型 ,
返回的一个字符串,格式如下:
{strs:[null,['sdf',null],['sdf','ggds'],['wer','saw']],name:'name',age:'12',sysLoginID:'',password:'sdf'}
(怎么转?,有写好的code ,Helper.toJSONString(Object obj) ,详见:Helper(http://chrnc.iteye.com/admin/blogs/269322)

现在看看 JavaScript 这边怎么来处理 :
testValue是传给 TestService 的 参数, TestService 是java 用伪装的 JavaScript类 。
现在将TestService 返回的 数据 ({strs:[null,['sdf',null],['sdf','ggds'],['wer','saw']],name:'name',age:'12',sysLoginID:'',password:'sdf'})
赋值给 curData
代码如下:



var curData = "";
DWREngine.setAsync(false); 
var callbackProxy = function(serverRetValue) {new function(){curData=serverRetValue;}};  
var callMeta = { callback:callbackProxy };
TestService.getTestJSONStr(testValue,callMeta);
DWREngine.setAsync(true);
var JSONObj = eval("("+curData+")"); //弄了变天就为了这句 



JSONObj是 转换出来的 JavaScript 原声类型 

JSONObj.name 你会得到 "nameStr"
JSONObj.sysLoginID 你会得到 null
JSONObj.strs[1][0] 你会得到 "sdf"

我见过一些兄弟,挺猛,就能把上面的VO连接成字符串后到前台的JavaScript中来拆分,取数据,但是,如果没了注释的话,以后谁能维护?看懂的成问题。
谨以此文送给我那还在拆分字符串的朋友们。


当然,在开发中我们不会去调用DWREngine去设置同步和异步的,转换JSON等动作也会放到 callback function 中去做,上面的写法只是理想状态的写法,只为转换JSON的逻辑看着更清晰连贯,现实中,如果后台动作很耗时的话,这么做了你会发现,你的在页面上,键盘和鼠标都不响应了,浏览器处于冻结状态.....我年轻时在开发时候这么写过,还教别人也这么用DWREngine,真是无知者无谓啊,不知现在他们和公司发现这些问题没...
完。
分享到:
评论
7 楼 luckaway 2009-11-13  
ray_linn 写道
javascript oo不oo ,意义不是很大。

如果不用面向对象的思维去编写js,那你也只能写写个人网站的表单验证!
6 楼 luckaway 2009-11-13  
zozoh 写道
JS 的特点是 后绑定。OO 不OO不是它的特色。

关于Json, 如果你看了  http://www.json.org/  的第一句话,

  JSON (JavaScript Object Notation) is a lightweight data-interchange format.

估计你不会发这篇贴。


你也太小小看js了。js一开始就被设计成彻底的面向对象语言(jquery之父说的)

写js新手犯的一个错误就是定义太多的全局变量和全局函数,来了个需求,就实现一个函数,从来不考虑上下文关系!

5 楼 anyu 2009-10-20  
同意4楼及1楼,反对2楼。4楼从JavaScript 的语言层面说明为什么不OO。我从设计层面及代码实检层面说说为什么对JavaScript 不OO。

从设计层面JavaScript用于web客户端的UI及业务逻辑控制并同于服务端代码相互配合完成一个个功能,所以对于同一个对象,需要在客户用javascript表示一次还要在服务端的语言(比如java\C#)再表示一次。 这就违反设计一致性原则:每次这个对象变化或改动时都要记得对这个对象的两个不同位置的定义。如果一个软件项目有几百上千这样的对象,要记得让两个不同位置的定义一致是个不小工作问题。
javascript是弱类型语言其Intellisense虽然有所提高,但无法跟服务端语言Intellisense来的有效。
我的代码实检:使用JavaScript的ajax访问服务端的服务(或实现了IHttpHandler的网页)来返回json对象。所认只面在服务端定义一次需要的对象,客户端需要时直接返回对庆的json对象就OK了。
4 楼 zozoh 2009-01-20  
JS 的特点是 后绑定。OO 不OO不是它的特色。

关于Json, 如果你看了  http://www.json.org/  的第一句话,

  JSON (JavaScript Object Notation) is a lightweight data-interchange format.

估计你不会发这篇贴。
3 楼 gbb21 2009-01-12  
你说的这个问题好像跟OO没关系哦?
2 楼 chrnc 2009-01-12  
有人竟然说OO不oo没什么意义,真是无知者无谓。
1 楼 ray_linn 2008-11-18  
javascript oo不oo ,意义不是很大。

相关推荐

Global site tag (gtag.js) - Google Analytics