`

利用闭包实现的方法拦截器

阅读更多
该函数可以让你轻松获知任意函数的传入参数和返回值
注意:该函数使用需要Chrome控制台或者Firebug
App = function(){
					function getResultFn(name, fn){
                        return function(){
                            console.log("正在执行的函数:" + name);
                            console.log('该函数的参数列表:');
							for(var i=0;i<arguments.length;i++){
								console.log(arguments[i]);
							}
                            var res = fn.apply(this, arguments);
							if (res) {
								console.log('该函数运行结果:');
								console.log(res);
							}
                            return res;
                        }
                    }
					return {
						/**
						 * 
						 * @param {Object} clazz 对象
						 * @param {Object} name 对象属性名称(该属性必须为函数)
						 * @param {Object} isPrototype 该属性是否原型属性
						 */
						check:function(clazz,name,isPrototype){
							var p = (isPrototype===true)?clazz.prototype:clazz;
							if(!p[name]||typeof p[name]!= 'function'){
								console.log('This protperty is not exist or it is not a function!');
								return;
							}
							p[name] = getResultFn(name,p[name]);
						}
					}
				}();

该函数实现用到JS的闭包特性(包了两层)、特殊对象arguments、prototype属性、对象做为关联数组进行使用的知识,对于初学者理解起来肯定有点难度,不过使用起来可是相当的简单,譬如你要监听Array对象的push方法,只需要
App.check(Array,'push',true);

以下是Chrome控制台运行下的结果:



  • 大小: 3.8 KB
分享到:
评论

相关推荐

    iOS runtime实用篇:让你快速上手一个项目 - CocoaChina_让移动开发更简单1

    iOS开发者还经常使用Runtime来实现方法选择器(Method Selectors)、协议(Protocols)以及代理(Delegates)。方法选择器是Objective-C中的SEL类型,代表一个方法的唯一标识。协议定义了一组方法签名,类或实例可以...

    程序员javaScript、struts2.0中文手册

    4. **拦截器**:Struts 2 使用拦截器链来处理请求,拦截器可以实现日志记录、权限验证、异常处理等功能。 5. **OGNL(Object-Graph Navigation Language)**:Struts 2 的默认表达式语言,用于在视图和控制器之间...

    Groovy_in_Action

    这使得动态添加方法、属性和拦截器成为可能。 6. ** Grape(依赖管理)**: - Groovy有自己的依赖管理系统Grape,可以自动下载和管理项目依赖,类似于Maven或Gradle。 7. ** Grape annotations**: - 使用`@Grab...

    groovyexample

    3. **Struts2 拦截器**:Groovy 可以创建自定义拦截器,增强应用的功能,如权限验证、日志记录等。 4. **Spring 的 DI**:使用 Groovy 定义 Bean,通过注解或 XML 配置文件进行依赖注入,构建对象之间的关系。 5. ...

    JavaScript王者归来part.1 总数2

     10.7.1.2 系统实现--计价公式编辑器的实现   10.7.2 创建一个同步滚动歌词播放器   10.7.2.1 需求分析--什么是同步滚动歌词播放器   10.7.2.2 系统设计与实现--处理LRC歌词   10.8 总结   第三部分 ...

    Secrets of the JavaScript Ninja, 2nd Edition chapter 7 sample

    文档还简要介绍了控制对象访问、监控对象状态的方法,这包括使用getter和setter(访问器属性)以及JavaScript中的代理对象(Proxy)。代理对象是一种新的对象类型,它允许拦截和定义对象的基本操作,如属性读取、...

    前端项目-javascript-hooker.zip

    3. **闭包**:有时,我们可以通过创建闭包来实现Monkey Patch,尤其是在处理事件监听器时。闭包可以访问并修改外部函数的变量,从而达到修改行为的目的。 4. **AOP(面向切面编程)**:借鉴后端编程的概念,...

    设计模式_javascript_源码.zip

    在JavaScript中,可以利用`for...of`循环或者数组的`forEach()`方法来实现迭代。 通过深入学习和实践这些设计模式,开发者可以提高代码的可读性、可复用性和可维护性,更好地应对复杂项目的需求。这个“设计模式_...

    Javascript 设计模式

    在JavaScript中,可以利用`Proxy`对象实现这一模式,实现数据的拦截和处理。 6. **装饰器模式**:动态地给一个对象添加一些额外的职责,增强功能而不改变其原有结构。在JavaScript中,装饰器是一种特殊类型的声明,...

    Laravel开发-boosters

    - Laravel 中间件作为请求处理的“拦截器”,可以实现权限验证、会话管理等功能,提高代码复用性。 3. **事件与监听器** - **事件系统**:允许开发者在应用程序中触发和响应特定事件,实现解耦和模块化。 - **...

    YYRouter一个简单好用的swift路由组件.zip

    4. **拦截器**:可能提供拦截器机制,允许在路由前进行权限检查、数据预处理等操作。 5. **模块化**:有助于实现应用的模块化设计,每个模块可以有自己的路由规则。 6. **性能优化**:由于是针对Swift优化,...

    java strtus jsp javascript

    学习Struts,你需要掌握控制器Servlet、配置文件(struts-config.xml或struts2的struts.xml)、拦截器等核心概念。 其次,JavaScript是一种在客户端运行的脚本语言,用于实现网页的动态交互。`JAVASCRIPT.chm`可能...

    JVM dynamic languages MetaobjectProtocol-开源

    例如,通过实现特定的接口,可以自定义类加载器、方法拦截器等,从而实现语言特有的元编程功能。 四、应用场景 JVM上的MOP开源实现广泛应用于各种动态语言的JVM版本,如Groovy、JRuby、Clojure等。这些语言利用MOP...

    JavaScript最常用的55个经典技巧

    3. **闭包**:利用闭包保存状态,实现模块化和私有变量。 4. **事件处理**:学会addEventListener和removeEventListener,避免事件冒泡和阻止默认行为。 5. **DOM操作**:熟练使用querySelector、querySelectorAll...

    JavaScript的十五种设计模式

    4. **原型模式**:利用JavaScript的原型特性,实现对象间的属性和方法共享,达到代码复用。 5. **代理模式**:为其他对象提供一个代理以控制对这个对象的访问。在JavaScript中,可以用来封装或拦截某些操作。 6. *...

    JS高级编程设计.pdf

    - **闭包**:理解闭包的概念,以及如何利用闭包实现私有变量和方法。 - **原型链**:深入学习JavaScript的对象模型和原型继承机制。 - **异步编程**:探讨事件循环机制、回调函数、Promise、async/await等概念。 ##...

    JavaScript手册 Struts 2.0 API

    Interceptor是拦截器,允许在Action执行前后进行自定义操作,如日志记录、权限检查等;Result则控制视图的呈现方式,如重定向或转发到特定页面。理解API的使用可以帮助开发者构建更高效、可维护的Struts 2应用。 ...

    Laravel开发-laravel-treats .zip

    7. **中间件**:中间件是Laravel处理请求和响应过程中的“拦截器”。它可以用于认证、日志记录、限制访问等功能。例如,`auth`中间件可以确保只有已登录用户才能访问某些路由。 8. **数据库迁移与seed**:Laravel的...

    javascript designPatterner

    在JavaScript中,可以利用`Proxy`对象实现,用于拦截和修改对目标对象的操作。 8. **适配器模式**:使得原本由于接口不兼容而不能一起工作的类能够协同工作。在JavaScript中,可以创建一个适配器函数或对象,将不同...

    Spring Framework 开发参考手册 .rar

    开发者可以利用Spring MVC创建RESTful服务,实现前后端分离,并通过拦截器、模型绑定和数据验证等功能增强应用的交互性。 在Spring Framework中,还有Spring Boot,这是一个微服务开发的强大工具。它通过默认配置极...

Global site tag (gtag.js) - Google Analytics