zoukankan      html  css  js  c++  java
  • javascript -- 代理模式

    var myImage = (function(){
            var imgNode = document.createElement( 'img' );
            document.body.appendChild( imgNode );
            return {
                setSrc: function( src ){
                    imgNode.src = src;
                }
            }
        })();
        var proxyImage = (function(){
            var img = new Image;
            img.onload = function(){
                myImage.setSrc( this.src );
            }
            return {
                setSrc: function( src ){
                myImage.setSrc( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' );
                img.src = src;
                }
            }
        })();
        proxyImage.setSrc( 'http:// imgcache.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

    以上代码是通过虚拟代理实现图片的懒加载

    var mult = function(){
    	console.log( '开始计算乘积' );
    	var a = 1;
    	for ( var i = 0, l = arguments.length; i < l; i++ ){
    		a = a * arguments[i];
    	}
    	return a;
    };
    mult( 2, 3 ); // 输出:6
    mult( 2, 3, 4 ); // 输出:24
    现在加入缓存代理函数:
    var proxyMult = (function(){
    	var cache = {};
    	return function(){
    		var args = Array.prototype.join.call( arguments, ',' );
    		if ( args in cache ){
    			return cache[ args ];
    		}
    		return cache[ args ] = mult.apply( this, arguments );
    	}
    })();
    proxyMult( 1, 2, 3, 4 ); // 输出:24
    proxyMult( 1, 2, 3, 4 ); // 输出:24
    当我们第二次调用proxyMult( 1, 2, 3, 4 )的时候,本体mult 函数并没有被计算,proxyMult
    直接返回了之前缓存好的计算结果。

    代理模式中比较常用的是缓存代理和虚拟代理,在实际开发中,你不必要想着在哪里用代理,当你直接访问一个对象不合适时,才用。

  • 相关阅读:
    细说进程、应用程序域与上下文之间的关系
    sql server2008添加登录账户配置权限 && 登录时18456错误
    Sql CLR
    设计模式学习篇(一)
    常用实用方法
    OOP 6大基本原则
    如何成为一个优秀的程序员
    家庭网络
    反射
    ADO.Net 事务操作
  • 原文地址:https://www.cnblogs.com/luguiqing/p/7722532.html
Copyright © 2011-2022 走看看