jlUtil For Javascript

In: Javascript| Web前台相关

31 Jul 2009

昨天用js写了一个Json_encode的工具函数,附上模仿jQuery并加强的extend函数。
对于extend函数,主要加强的是可以遍历子对象来extend,而不是简单的覆盖。

getJSON的使用方法:

jlUtil.getJSON(obj:Object [, skip_arr:Array])
//skip_arr指定要忽略的键名

extend的使用方法:

jlUtil.extend(obj:Object [, obj2:Object...])
//这个函数需要jQuery
//如果只带一个参数,则这个obj将被extend到jlUtil本身
//如果带两个以上的参数,则第2个及以后的参数将被extend到第一个参数

下面是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var jlUtil = {
	getJSON: function(obj, skip_arr){
		if(typeof obj == "number"
		|| typeof obj == "boolean"){
			return obj;
		}else if(typeof obj == "string"){
			return "'" + obj.replace("'","\\'") + "'";
		}
 
		var json = [];
		skip_arr = skip_arr ? skip_arr : [];
		for(var key in obj){
			//skip function and the keys in skip arr
			if(obj[key].constructor == Function
			|| skip_arr.indexOf(key) != -1){
				continue;
			}
 
			//in Array loop
			if(!isNaN(parseInt(key)) || key.constructor != String){
				json.push(jlUtil.getJSON(obj[key], skip_arr));
				continue;
			}
 
			//else recurrency
			json.push("'" + key + "':" + jlUtil.getJSON(obj[key], skip_arr));
		}
 
		if (obj.constructor == Array) {
			return "[" + json.join(",") + "]";
		} else {
			return "{" + json.join(",") + "}";
		}
	},
	extend: function(obj){
		if (arguments.length == 1) {
			this.extend(this, obj);
			return this;
		}else if(arguments.length >= 2){
			var dst = arguments[0];
			//extend the rest args to args[0]
			for(var i=1; i<arguments.length; ++i){
				for(var item in arguments[i]){
					var tmp = arguments[i][item];
					if(typeof arguments[i][item] == "object"){
						//make a copy while is a object, needs jQuery here
						var tmp = $.extend({}, arguments[i][item]);
					}
					//if is object try recurrency
					if(dst[item] && typeof dst[item] == "object"){
						try{
							this.extend(dst[item], tmp);
						}catch(e){
							dst[item] = tmp;
						}
					}else{
						dst[item] = tmp;
					}
				}
			}
			return dst;
		}
	}
};

无觅相关文章插件

相关日志:

Comment Form

关于博主

姓名:郑玏

性别:男

职业:IT工程师

爱好:KTV、乒乓球、台球、五子棋、围棋、编程

语言:中文、英语、闽南语

Email: