(3)理解代理 proxy

var Class = function(){
        var klass = function(){
            this.init.apply(this,arguments);
        };
        klass.prototype.proxy = function(func){
            var self = this;
            return (function(){
                return func.apply(self,arguments);
            });
        };

        klass.prototype.include = function(obj){
            for(var i in obj){
                klass.prototype[i] = obj[i];
            }
        };
        return klass;
    };

    var buton = new Class();
    buton.include({
        init:function(element){
            this.element = jQuery(element);
            //保证上下文一致,保证click function的作用于是整个上下文
            this.element.click(this.proxy(this.click));
        },
        click:function(){},

    });

看这个一段使用代理的代码,里面的一片代码

 klass.prototype.proxy = function(func){
            var self = this;
            return (function(){
                return func.apply(self,arguments);
            });
        };

简单点描述就是proxy代理里面的func方法,它的作用域会放到外面一层的作用域,使上下文一致。

理解代理,我们可以看一下这段代码

var Car = function(){
        this.CarName = "Mini";
    };

    Car.prototype.getName = function(){
        document.getElementById(‘nameBtn‘).addEventListener(‘click‘,function(){
            console.log(this.CarName);
        })
    };

    var car = new Car();
    car.getName();//undefined

为什么会爆undefined呢?是因为在addEventListener里面this指针的作用域和Car里面的指针作用域不一样。addEventListener里面没有this.CarName

所以解决的方案是:

var Car = function(){
        this.CarName = "Mini";
    };

    Car.prototype.getName = function(){
        var self = this;
        document.getElementById(‘nameBtn‘).addEventListener(‘click‘,function(){
            console.log(self.CarName);
        })
    };

    var car = new Car();
    car.getName();//Mini

=======================================================================================

最后的版本:

 var Car = function(){
        this.CarName = "Mini";
    };

    Car.prototype.getName = function(){
        document.getElementById(‘nameBtn‘).addEventListener(‘click‘,this.proxy(this.clickEvent));
    };
    Car.prototype.proxy = function(func){
        var self = this;
        return (function(){
            return func.apply(self,arguments);
        });
    };

    var car = new Car();

    car.clickEvent = function(){
        console.log(this.CarName);
    };
    car.getName();//Mini
时间: 2024-08-06 23:32:55

(3)理解代理 proxy的相关文章

代理(Proxy)和反射(Reflection)

前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层JS引擎操作的包装器,在新语言中通过它暴露内部运作的对象,从而让开发者可以创建内建的对象.本文将详细介绍代

代理(Proxy)和反射(Reflection) (转)

转自:http://www.cnblogs.com/xiaohuochai/p/7268600.html 前面的话 ES5和ES6致力于为开发者提供JS已有却不可调用的功能.例如在ES5出现以前,JS环境中的对象包含许多不可枚举和不可写的属性,但开发者不能定义自己的不可枚举或不可写属性,于是ES5引入了Object.defineProperty()方法来支持开发者去做JS引擎早就可以实现的事情.ES6添加了一些内建对象,赋予开发者更多访问JS引擎的能力.代理(Proxy)是一种可以拦截并改变底层

Ubuntu Linux下通过代理(proxy)使用git上github.com

github.com,作为程序员的代码仓库,我们经常会用到.但有时候我们不能直接通过网络链接它,只能通过代理. 这里我有一台代理服务器,起初我以为在终端设置了代理环境就行了,其设置为在你的~/.bashrc里增加以下几行: export http_proxy="http://proxy-server:3128/" export https_proxy="http://proxy-server:3128/" export ftp_proxy="http://

java代理Proxy

首先是静态代理: 1 public class Test1 { 2 3 public static void main(String[] args) { 4 IA a = new APoxy(new A()); 5 a.doJob(); 6 } 7 8 } 9 //功能接口 10 interface IA{ 11 public void doJob(); 12 } 13 //委托类 14 class A implements IA{ 15 16 @Override 17 public void

Linux与云计算——第二阶段 第一十一章:代理Proxy服务器架设—Squid代理服务器正向代理和客户端配置

Linux与云计算--第二阶段Linux服务器架设 第一十一章:代理Proxy服务器架设-Squid代理服务器正向代理和客户端配置 安装Squid 安装Squid来配置代理服务器. [1] 这是一个通用的转发代理配置 [[email protected] ~]# yum -y install squid [[email protected] ~]# vi /etc/squid/squid.conf # line 26: 添加一条新的ACL acl lan src 192.168.96.0/24

SCOM 2012知识分享-1:理解代理

Operations Manager"代理"是安装在计算机上的一项服务. 代理会收集数据.将采样数据与预定义的值进行比较.创建警报并运行响应. 管理服务器会接收配置并将配置分发到受监视的计算机上的代理. 所有代理均要向管理组中的一个管理服务器报告. 此管理服务器称为代理的主管理服务器. 代理根据管理服务器发送的配置观察受监视的计算机上的数据源并收集信息. 此代理还计算监视的计算机以及监视的计算机上的对象的运行状况状态,并向管理服务器报告. 监视的对象的运行状况变化或其他条件满足时,代理

设计模式 之代理(Proxy)模式

为什么这里要定义代理呢?所谓代理代理,当然就是你不想做的事,找别人去做,这就是代理.所以,当你写代码的时候,你想保持类的简单性.重用性,你就可以把事件尽量都交给其它类去做,自己只管做好自己的事.也就是SRP,单一职责原则.如果一个类关注的点过多,做的事情太多.这些事情不管是你直接做的,还是调用别的对象去完成的.这都不行,自己做这些事,那就会使类的功能复杂化,维护不方便.而过多地调用其它对象来完成一些事情,表面上看起来好像不错,实际上是过度耦合了.我们编写类的原则应该是追求高内聚,低耦合的.可能你

如何理解代理和反射?

一.本节主要点 代理的概念 静态代理和动态代理 cglib 什么是代理呢? 代理,就是一个角色代表另一个角色去完成某件事. 比如,你肚子饿了,又懒得出去吃饭,这时候,你的朋友正好要出去,你让他帮忙打包.那他就是代理类.你就是委托他去做事. 如何理解代理和反射?

初识代理——Proxy

无处不在的模式——Proxy 最近在看<设计模式之禅>,看到代理模式这一章的时候,发现自己在写spring项目的时候其实很多时候都用到了代理,无论是依赖注入.AOP还是其他,可以说是无处不在. 于是自己便自己摸索写了一些小例子,当然也参考了网上其他博主的博客,毕竟小白一枚hhhhhh 进入正题: 图1-1:代理Proxy 代理模式现在主流的有两大类:1.JDK代理    2.CGLB代理 (JDK静态代理就不说了,网上很多都有,主要我觉得现在面向企业项目,静态代理局限性有点大,对于我而言可能就