原理:参数适配器说白了就是给出要带入数据字段的对应字段的默认值,一旦数据字段值不足,就取默认值补足。

[写法一]:直接返回

<!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适配器模式之参数适配器的更多相关文章

  1. js原生设计模式——2面向对象编程之继承—多继承

    1.单对象克隆 <!DOCTYPE html><html lang="en"><head>    <meta charset=" ...

  2. js原生设计模式——2面向对象编程之继承—new+call(this)组合式继承

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. js原生设计模式——2面向对象编程之继承—call(this)构造函数式继承

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  4. js原生设计模式——13桥接模式(相同业务逻辑抽象化处理的职责链模式)

    桥接模式之多元化类之间的实例化调用实例 <!DOCTYPE html><html lang="en"><head>    <meta ch ...

  5. js原生设计模式——8单例模式之简约版属性样式方法库

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. js原生设计模式——8单例模式

    1.单例模式——在js中就是指的单个对象,可用于命名空间声明 2.示例 <!DOCTYPE html><html lang="en"><head> ...

  7. js原生设计模式——7原型模式之new+call(this)组合应用再探讨实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. js原生设计模式——4安全的工厂方法模式之Factory方法模式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. js原生设计模式——4安全的工厂方法模式之oop编程增强版

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

随机推荐

  1. 连接Oracle数据库的Hibernate配置文件

    连接Oracle数据库的Hibernate配置文件连接Oracle的Hibernate配置文件有两种格式,一种是xml格式的,另一种是Java属性文件格式的.下面分别给出这两种格式配置文件的代码. 1 ...

  2. 滑雪(ski)

    滑雪(ski) 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  3. java.net.URLEncode编码 与 URLDecode解码问题

    1.java内部加密和解密 String mytext = java.net.URLEncoder.encode("中国", "utf-8"); String ...

  4. rowcommand事件中获取控件

    //根据当前按钮生成命名空间 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)        ...

  5. HDU 1260 Tickets(基础dp)

    一开始我对这个题的题意理解有问题,居然超时了,我以为是区间dp,没想到是个水dp,我泪奔了.... #include<stdio.h> #include<string.h> # ...

  6. iOS 旋屏问题

    今天突然想起来,以前的一个问题没有解决,就上网百度了一些方法,看到一篇文章,写的很详细,我就操作试试,结果还真的实现了功能,接下来我将重复他的结合我自己的测试,说一下iOS中的旋屏问题. 1.首先配置 ...

  7. Size Balanced Tree(SBT) 模板

    首先是从二叉搜索树开始,一棵二叉搜索树的定义是: 1.这是一棵二叉树: 2.令x为二叉树中某个结点上表示的值,那么其左子树上所有结点的值都要不大于x,其右子树上所有结点的值都要不小于x. 由二叉搜索树 ...

  8. php使用curl设置超时的重要性

    原文:http://phpquan.com/lamp/php/php-curl-timeout/ 网站登录不了,原因是没有可用的 PHP 子进程来响应新的请求了.这可能是是由于PHP-curl  没有 ...

  9. gcd timer

    //0.创建队列 dispatch_queue_t queue = dispatch_get_global_queue(, ); NSLog(@"%s",__func__); // ...

  10. Sencha Touch学习(一)

    一.Ext的内部类结构示意图 基类Ext.Base 该类是所有通过Ext.define定义出来的类的基类. 是所有Ext类的基石. 来自为知笔记(Wiz)