对象初始化,并且设置默认值
一个对象作为参数传入时,可能有该对象也可能没有。而且,对象内的属性个数也是不确定的。
var ripStTemp = {};
/* 如果全局变量ripSt未提供,则设置默认值 */
ripSt = window.ripSt || {};
ripStTemp.enable = (ripSt.enable === undefined)? false : ripSt.enable ;
ripStTemp.autoSum = (ripSt.autoSum === undefined)? false : ripSt.autoSum ;
ripStTemp.distStatic = (ripSt.distStatic === undefined)? false : ripSt.distStatic ;
ripStTemp.updateTimer = (ripSt.updateTimer === undefined)? 30 : ripSt.updateTimer ;
ripStTemp.timeOutTimer = (ripSt.timeOutTimer === undefined)? 120 : ripSt.timeOutTimer ;
ripStTemp.garbageTimer = (ripSt.garbageTimer === undefined)? 300 : ripSt.garbageTimer ;
ripStTemp.distance = (ripSt.distance === undefined)? 12 : ripSt.distance ;
ripStTemp.metric = (ripSt.metric === undefined)? 8 : ripSt.metric ;
ripStTemp.version = (ripSt.version === undefined)? 'ripV1' : ripSt.version ;
参考iscroll.js代码的实现,上面的代码写成这样更加简洁。
var i;
/* 默认选项 */
var ripStOption = {
enable: false,
version: 'ripV1',
distance: 120,
autoSum: true,
metric: 12,
distStatic: false,
updateTimer: 30,
timeOutTimer: 180,
garbageTimer: 300
};
/* ripSt为全局变量,window.ripSt为rpm函数生成。
* 设置rpm函数传入的数据
*/
ripSt = window.ripSt || {};
for (i in ripSt) that.ripStOption[i] = ripSt[i];
参考toast.js代码的实现,如果使用了jquery库,那么可以使用jquery.extend()函数实现以上代码。
/* ripSt为全局变量,window.ripSt为rpm函数生成。
* 设置rpm函数传入的数据
*/
ripSt = window.ripSt || {};
$.extend(ripStOption,ripSt);
对象的遍历,并且转化为数组
使用for in结构,使用[]操作而不是.操作访问对象的属性值。
var rtArray = [];
/* just for test */
/* rtTable对象的demo:*/
rtTable = {
rt1:{dst:"192.168.0.0/24",gateway:"192.168.0.1",metric:1,intf:"sc1",time:23},
rt2:{dst:"192.168.2.0/24",gateway:"192.168.2.1",metric:2,intf:"lo3",time:2},
rt3:{dst:"192.168.3.0/24",gateway:"192.168.3.1",metric:2,intf:"sc4",time:122}
};
/* 将rtTable对象转化为rtArray数组 */
/* rtArray数组的结构demo:
var rtArray = [
["192.168.1.0/24","192.168.1.1","1","sc1","1"],
["192.168.2.0/24","192.168.2.1","2","sc2","3"],
["192.168.3.0/24","192.168.3.1","3","sc3","4"],
["192.168.4.0/24","192.168.4.1","4","sc4","16"]
];
*/
for ( var key in rtTable ){
rtArray.push(new Array(rtTable[key].dst,rtTable[key].gateway,rtTable[key].metric,rtTable[key].intf,rtTable[key].time));
}