内容简介:有一天,老大见程序员小T的核心逻辑代码相当冗杂,核心逻辑模块和一些无关的功能融成一团,就告诉小T,让他尝试把日志统计,异常处理模块从和核心逻辑模块中抽离出来,对于刚入职经验不足的小T来说,犹如晴天霹雳。小T前思后想,还好大学期间读了不少编程相关的书籍有些功底,既然目的是想把一些日志统计、异常处理这些和核心逻辑代码无关的抽离出来,他灵机一闪,心想这不是面向切面编程(AOP)嘛,老大果然是老司机,把和核心逻辑模块无关的功能抽离出来,业务逻辑模块就清晰了很多,还能够复用日志统计、日常处理等这些功能模块,真是两全
有一天,老大见 程序员 小T的核心逻辑代码相当冗杂,核心逻辑模块和一些无关的功能融成一团,就告诉小T,让他尝试把日志统计,异常处理模块从和核心逻辑模块中抽离出来,对于刚入职经验不足的小T来说,犹如晴天霹雳。小T前思后想,还好大学期间读了不少编程相关的书籍有些功底,既然目的是想把一些日志统计、异常处理这些和核心逻辑代码无关的抽离出来,他灵机一闪,心想这不是面向切面编程(AOP)嘛,老大果然是老司机,把和核心逻辑模块无关的功能抽离出来,业务逻辑模块就清晰了很多,还能够复用日志统计、日常处理等这些功能模块,真是两全其美啊!
于是小T开始了实现AOP之旅,心想核心业务模块和其他模块,那我就抽象成两个函数,既然需要在核心业务模块中使用异常处理这些功能,我应该把异常处理函数动态织入到其中,想到这小T不禁欣喜了一番,但是马上又陷入了思考,我应该怎么把一个函数”动态织入”到另一个函数中呢?小T之前对于原型的掌握相当扎实,于是他想我可不可以扩展Function的原型来把一个函数”动态织入”另一个函数呢.小T决定试一下,于是便敲敲打打:
Function.prototype.before = function(){ }
小T想,我需要一个原函数(核心逻辑模块)和新函数(日志统计),我可以把”动态织入”的新函数作为参数传递,然后返回原函数和新函数的”代理”函数,然后执行,这样我不就可以在原函数之前执行新函数啦。既然Function.prototype.before里有原函数又有传递的新函数参数,新函数被执行后this的指向可能会被劫持,所以他想到了先保存一下原函数引用
Function.prototype.before = fcuntion(beforefn){ var _self = this; //保存原函数的引用 return function(){ //返回包含了原函数和新函数的”代理“函数 } }
然后小T想,既然是before要让新函数在原函数之前执行,return function(){}我应该怎么处理可以让两个函数执行并且不会导致this被劫持呢,小T说如果我直接执行beforefn(),那么this指向会被劫持,小T想到apply/call可以很自然的控制/重写this值,以便定义调用函数时确定this指向哪个对象,决定用apply试试:
Function.prototype.before = fcuntion(beforefn){ var _self = this; return function(){ beforefn.apply(this,arguments); // 执行新函数,且保证this不被劫持,新函数接受的参数会被原封不会的传入原函数,新函数在原函数之前执行 return _self.apply(this,arguments) //执行原函数并返回原函数执行结果,并保证this不被劫持 } }
写到这里,小T有些激动
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- AOP装饰函数与小T的情愫(二)
- AOP装饰函数与小T的情愫(一)
- Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)
- Python 函数调用&定义函数&函数参数
- python基础教程:函数,函数,函数,重要的事说三遍
- C++函数中那些不可以被声明为虚函数的函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网络、群体与市场
大卫·伊斯利(David Esley)、乔恩·克莱因伯格(Jon Kleinberg) / 李晓明、王卫红、杨韫利 / 清华大学出版社 / 2011-10-1 / CNY 69.00
过去十年来,现代社会中复杂的连通性向公众展现出与日俱增的魅力。这种连通性在许多方面都有体现并发挥着强大的作用,包括互联网的快速成长、全球通信的便捷,以及新闻与信息(及传染病与金融危机)以惊人的速度与强度传播的能力。这种现象涉及网络、动机和人们的聚合行为。网络将人们的行为联系起来,使得每个人的决定可能对他人产生微妙的后果。 本书是本科生的入门教材,同时也适合希望进入相关领域的高层次读者。它从交......一起来看看 《网络、群体与市场》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
HSV CMYK 转换工具
HSV CMYK互换工具