Java里有面向切面的实现方式,可以监控包、对象、函数等的行为,以及动态修改函数的参数和返回值等。
那么在JavaScript里是否有对应实现?在用到对一个函数进行切面时,如何监控函数的参数
和执行过程,以及修改函数的执行方式。
在用jasmine对代码进行测试时,jasmine使用了一个很优雅的方式,使用spyOn对函数进行监控。虽然没有看过jasmine的源代码,但时,spyOn函数修改了函数的默认行为。受此启发,JavaScript里是可以实现切面操作的。
实现方式:
实际在应用中,我们可以将代理和切面功能完善一下,给出一个完善的方法,如
来完成代理和切面。
那么在JavaScript里是否有对应实现?在用到对一个函数进行切面时,如何监控函数的参数
和执行过程,以及修改函数的执行方式。
在用jasmine对代码进行测试时,jasmine使用了一个很优雅的方式,使用spyOn对函数进行监控。虽然没有看过jasmine的源代码,但时,spyOn函数修改了函数的默认行为。受此启发,JavaScript里是可以实现切面操作的。
实现方式:
/** * 原函数 * @param {type} val * @returns {Number} */ function fun(val){ return val+1; } /** * 注册前置函数 * @returns {undefined} */ function before(){ var f = fun; window.fun = function(val){ //修改参数 val = val+2; //执行原函数 return f(val); }; } //注册 before(); //执行 var rst = fun(1); console.log(rst);
结果输出:4
实际在应用中,我们可以将代理和切面功能完善一下,给出一个完善的方法,如
/** * * @param {type} fun 原函数 * @param {type} obj fun所属的对象 * @param {type} before 前置函数 * @param {type} after 后置函数 */ function proxy(fun,obj,before,after)
来完成代理和切面。
发表评论
-
解决eclipse在修改js卡顿现象
2018-02-09 15:49 1280新版eclipse编辑含有javascript内容的jsp时, ... -
chosen 数据的动态更新
2016-09-08 15:28 1709chosen是个不错的复合下拉组件,缺点是文档较少 源码在gi ... -
优秀的弹层组件
2016-04-20 18:19 633http://layer.layui.com/ -
googleapis.com域名访问慢的解决办法
2016-04-13 12:09 8881、安装火狐 2、安装插件ReplaceGoogleCDN -
国内常用前端公共库CDN服务
2015-11-15 14:00 909BAIDU http://cdn.code.baidu.co ... -
jquery validate 1.14
2015-10-12 20:14 765<!DOCTYPE html PUB ... -
jquery 事件处理handler函数的参数
2015-02-08 23:22 2544jquery 事件处理handler函 ... -
jquery tr rowindex
2014-11-30 13:42 858var tr = $(this).parents('tr' ... -
jqgrid please select row warning
2014-11-23 19:42 1681引入ui.jqgrid.css即可解决 -
改变多个jquery.ready的默认顺序
2014-11-23 15:37 1255$(document).ready 这个函数的解释: 引用 D ... -
javascript 错误的继承方式
2014-11-02 23:02 691var parent = {t:1,m:2,} pare ... -
JS图片格式验证
2014-07-03 16:48 865function pic(file){ var r ... -
更改underscorejs默认的匹配符
2014-06-14 11:51 805/** 修改underscore.js默认的< ... -
uglifyjs批量压缩js
2014-06-13 16:34 2390jquery官方使用uglifyjs进行压缩的,压缩比较高 ... -
html5 canvas作的手写板【兼容手机】
2014-05-21 15:56 5232<!DOCTYPE html> <ht ... -
backbone.js model和view视图的单元测试
2014-05-20 17:32 1313backbone的模块化开发,需要引入测试流程保证代码的质量, ... -
由正则表达式html或xml标签配对说起【括号编组和正负向预查】
2014-05-15 14:17 2434经常会查找xml或HTM ... -
netbeans和karma进行单元测试二【jasmine入门】
2014-05-20 15:43 1634karma配好之后,默认使用的是jasmine作为测试框架: ... -
backbone.js路由Router的使用
2014-05-09 11:33 1524路由的使用很简单,路由的转向 router.navigate( ... -
backbone.js的View里的事件重复调用
2014-05-09 11:18 1946backbone的一个视图被初始化多次后,发现一个按钮事 ...
相关推荐
AOP面向切面编程的JavaScript实现
主要介绍了Javascript面向切面编程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
lotus domino javascript調用代理
第3部分深入探索JavaScript,介绍了语法、值、运算符、布尔类型、数字、字符串、语句、异常捕获、函数、变量、对象与继承、数组、正则表达式、Date、Math、JSON、标准全局变量、编码和JavaScript、ECMAScript 5的新...
javascript高效编程和函数式编程指南书籍PDF,适合深入学习javascript
这里介绍一下javascript delegate的用法和原理,以及Dojo,jQuery等框架中delegate的接口。 JavaScript事件代理 事件代理在JS世界中一个非常有用也很有趣的功能。当我们需要对很多元素添加事件的时候,可以通过将...
JavaScript语言精粹(高清电子版)和高性能JavaScript 双语版
javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档
下面小编就为大家分享一篇JavaScript实现AOP的方法(面向切面编程,装饰者模式),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
javascriptAPI,javascript参考资料,javascript
JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材JavaScript简单教材
深入理解JavaScript系列(5):强大的原型和原型链 深入理解JavaScript系列(6):S O L I D五大原则之单一职责SRP 深入理解JavaScript系列(7):S O L I D五大原则之开闭原则OCP 深入理解JavaScript系列(8):...
javascript和jsp面之间的传值.docx
《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...
JavaScript手册 JavaScript手册 JavaScript手册
本书是 JavaScript 语言的参考手册,包括核心语言中的对象和客户端、服务器端的扩展。JavaScript 是 Netscape 跨平台的基于对象的适合于客户和服务器的脚本语言。 你应该已经知道的东西 在哪里能找到 JavaScript ...
通过认真研读本书,您将可以编写脚本来实现翻转等效果,并熟练使用Web 2.0和JavaScript子例程库等功能。 主要内容 ● 探讨最新的JavaScript编程技术 ● 制定脚本编写策略并选择合适的工具 ● 深入了解终止器、生成器...
《JavaScript征途》是一本学习JavaScript语言的权威书籍,在遵循语言学习的特殊规律基础上精心选材,力争做到统筹、有序,在结构上体现系统性和完整性。同时还重点挖掘JavaScript基于对象的开发精髓及函数式编程两个...