一部分读书笔记

读到代理模式proxy,随便写一点。

看了下jquery2.1.0的源码

        proxy: function( fn, context ) {
		var tmp, args, proxy;
                //如果传入的context是一个字符串
		if ( typeof context === "string" ) {
			tmp = fn[ context ];
			context = fn;
			fn = tmp;
		}

		// Quick check to determine if target is callable, in the spec
		// this throws a TypeError, but we will just return undefined.
		if ( !jQuery.isFunction( fn ) ) {
                        //不是函数就不返回新函数。返回undefined
			return undefined;
		}

		// Simulated bind
                //从传入参数的第二个开始取参数转为数组
		args = slice.call( arguments, 2 );
                //代理函数,return一个在指定作用域执行的函数,用上一个函数传入的第二个参数后的参数连接上新函数传入的参数。先把新函数转为了数组
		proxy = function() {
			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
		};

		// Set the guid of unique handler to the same of original handler, so it can be removed
                //设置全局唯一标示符,方便删除
		proxy.guid = fn.guid = fn.guid || jQuery.guid++;

		return proxy;
	}

还有一种简单的写法,其实怎么写都行了,看自己,哈哈,当然功能没那么强,比如参数传递等 :

var proxy = function (func,context){
    return (function (){
        return func,apply(context,arguments)
    });
}

GOF读了一遍,不过相对j,早年的那本js设计模式也是好书。前人经验和工程开发经验的总结还是很有启发,多写的话才能有所收获,不过因为编程语言本身的不断发展,某些设计模式确实用处不大了。

待续

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据