js原生设计模式——10适配器模式之参数适配器
原理:参数适配器说白了就是给出要带入数据字段的对应字段的默认值,一旦数据字段值不足,就取默认值补足。
[写法一]:直接返回
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>参数适配器1</title>
<script type="text/javascript">
//本地数据对象
var obj1 = {
name:'javascript高级编程2',
age:26,
price:45,
}
function doSomeThing(obj){
var _adapter = {//这个就是参数适配器,说白了就是参数默认值集合
name:'javascript高级编程',
author:'张小小',
age:28,
price:59,
press:'人民邮电出版社'
}
for(var i in _adapter){
_adapter[i] = obj[i] || _adapter[i];
}
return _adapter;
};
//测试用实例引用
var o = doSomeThing(obj1);
alert(o.name);
//本例已经通过验证
</script>
</head>
<body>
</body>
</html>
[写法一]:闭包返回
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>参数适配器1</title>
<script type="text/javascript">
//本地数据对象
var obj1 = {
name:'javascript高级编程2',
age:26,
price:45,
}
function doSomeThing(obj){
var _adapter = {//这个就是参数适配器,说白了就是参数默认值集合
name:'javascript高级编程',
author:'张小小',
age:28,
price:59,
press:'人民邮电出版社'
}
for(var i in _adapter){
_adapter[i] = obj[i] || _adapter[i];
}
return (function(){
return _adapter;
})();
};
//测试用实例引用
var o = doSomeThing(obj1);
alert(o.author);
//本例已经通过验证
</script>
</head>
<body>
</body>
</html>
[写法三]:匿名对象返回
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>参数适配器1</title>
<script type="text/javascript">
//本地数据对象
var obj1 = {
name:'javascript设计模式与开发实践',
age:26,
price:45,
}
function doSomeThing(obj){
var _adapter = {//这个就是参数适配器,说白了就是参数默认值集合
name:'javascript高级编程',
author:'张小小',
age:28,
price:59,
press:'人民邮电出版社'
}
return {
dataobj:function(){
for(var i in _adapter){
_adapter[i] = obj[i] || _adapter[i];
}
return _adapter;
}
}
};
//测试用实例引用
var o = doSomeThing(obj1);//o变量引用的是返回的匿名对象
alert(o.dataobj()['name']);//dataobj是匿名对象中的方法,只有执行一次后才会得到方法中的返回值_adapter,所以就有了dataobj()['name']的写法
//本例已经通过验证
</script>
</head>
<body>
</body>
</html>
js原生设计模式——10适配器模式之参数适配器的更多相关文章
- js原生设计模式——2面向对象编程之继承—多继承
1.单对象克隆 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- js原生设计模式——2面向对象编程之继承—new+call(this)组合式继承
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js原生设计模式——2面向对象编程之继承—call(this)构造函数式继承
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js原生设计模式——13桥接模式(相同业务逻辑抽象化处理的职责链模式)
桥接模式之多元化类之间的实例化调用实例 <!DOCTYPE html><html lang="en"><head> <meta ch ...
- js原生设计模式——8单例模式之简约版属性样式方法库
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js原生设计模式——8单例模式
1.单例模式——在js中就是指的单个对象,可用于命名空间声明 2.示例 <!DOCTYPE html><html lang="en"><head> ...
- js原生设计模式——7原型模式之new+call(this)组合应用再探讨实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js原生设计模式——4安全的工厂方法模式之Factory方法模式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js原生设计模式——4安全的工厂方法模式之oop编程增强版
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
随机推荐
- 关于Eclipse无法生成class文件的问题
今天调试东西的时候发现怎么都无法build 遂用Eclipse里的clean功能 打算重新编译一下结果所有的class文件全部消失了 重新打包发包也不行 经过查找后得到方法:把properties属性 ...
- 最新百度地图支持Fragment(注意事项)(转)
原文: 最新百度地图支持Fragment(注意事项) 开篇:老的百度地图通常都要继承MapActivity,这样不利于代码的可扩展性,再加上Fragment的流行,老的百度地图已经远远不能满足的大 ...
- POJ 2296 Map Labeler
二分答案 + 2-SAT验证,判断正方形是否相交写起来有点烦,思路还是挺简单的. #include<cstdio> #include<cstring> #include< ...
- php new self 详解(转)
self points to the class in which it is written. So, if your getInstance method is in a class name M ...
- JQuery UI 封装了一些常用模板
1.css 他已经封装了一些css样式,如果不喜欢,可以直接修改. 2.js 他已经封装了对应的js.
- 在nltk中调用stanfordparser处理中文
出现unicode decode error 解决办法是修改nltk包internals.py的java()下增加cmd的参数,cmd = ["-Dfile.encoding=UTF-8&q ...
- ARC下需要注意的内存管理
ARC下需要注意的内存管理 2016/04/03 · iOS开发 · 内存管理 分享到:1 原文出处: 一不(@luoyibu) 之前发了一篇关于图片加载优化的文章,还是引起很多人关注的,不过也 ...
- [iOS]C语言技术视频-05-程序循环结构(do{}while();)
下载地址: 链接: http://pan.baidu.com/s/1c02ke3m 密码: x97w
- ICE第三篇------一些疑难点
1 间接代理 参考http://blog.sina.com.cn/s/blog_53e8499c0100lkoo.html IceGrid用于支持分布式网络服务应用,一个IceGrid域由一个注册表( ...
- [转] Eclipse中已安装的插件如何卸载
转自 : http://blog.csdn.net/macong01/article/details/7631105 最近在Eclipse中安装了一个插件,导致Eclipse使用的时候有些问题,就找了 ...