区块链技术博客
www.b2bchain.cn

五、4. 代理模式求职学习资料

D0b2wT.gif

本文介绍了五、4. 代理模式求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

理解代理模式,很形象的例子就是明星的经济人。

我希望能够让某位明星成为我的代言人,但是一般情况只能跟经济人洽谈。而不会跟明星直接联系。

经济人就是明星的代理。

生活中也有许多代理模式的案例。

例如我想购买飞机票,但是我可以不用直接在机场购买,我们小区楼下就有一家代理出售机票火车票的小机构。

解决跨域问题也可以使用代理。

浏览器中某一页面无法直接访问其他域名的接口。那如果就是有需求要访问其他域名的接口怎么办呢?

我在自己域名服务器下,创建一个代理。

浏览器访问自己域名服务器的代理接口,代理接口在服务端,不在浏览器,就不会有跨域限制,于是服务端的代理接口可以去访问其他域名的数据。这样就达到了目的。

五、4. 代理模式

代理模式的好处,在明星经济人这里体现的非常明显。

想要找赵丽颖谈商业合作的商家非常多,但是如何对比开价更高的商家,如何淘汰恶意捣乱的商家,如何应付诚意不足的商家,如何安排通告行程等等,这些乱七八糟的事情都由经济人来处理。

而赵丽颖只需要确定最终选择商家即可。代理模式让她避免了很多杂务。

在我们的代码设计中,代理模式,是为其他对象提供一种代理以控制对该对象的访问。

五、4. 代理模式

  • 代理对象,是对目标对象的一次封装
  • 代理对象可预先处理访问请求,再决定是否转交给目标对象
  • 代理对象和目标对象,对外提供的可操作性方式保持一致

针对不同的场景,实现代理的方式可能不一样。

在 JavaScript 中,提供了默认的 Proxy 对象,用于创建一个对象的代理。

const t = {m: 1} const p1 = new Proxy(t, {   get: function(obj, prop) {     return obj[prop]   } })  // 通过代理对象,访问目标对象 console.log(p1.m)  // 1  // 通过代理对象修改目标对象 p1.m = 2 console.log(t) // {m: 2}

Proxy 的第一个参数为目标对象,第二参数是监听事件,可以监听代理对象的访问与修改操作。这样的话,我们就可以利用代理对象,对目标对象的访问进行数据的劫持。

Vue3.0 正是利用了 Proxy 这样的特点,才能得以使用 Proxy 替换掉 getter/setter。

我们也可以自己实现一个 Proxy 对象。

ProxyPolyfill 简化版,仅仅只提供了 Object 的兼容。仅供参考阅读

``js class Internal { constructor(target, handler) { this.target = target this.handler = handler } get(property, receiver) { var handler = this.handler; if (handler.get == UNDEFINED) { return this.target[property]; } if (typeof handler.get === 'function') { return handler.get(this.target, property, receiver); } } set(property, value, receiver) { var handler = this.handler; if (handler.set == undefined) { this.target[property] = value; } else if (typeof handler.set === 'function') { var result = handler.set(this.target, property, value, receiver); if (!result) { console.error(set 异常: ${property}`)
}
} else {
console.error(“Trap ‘set’ is not a function: ” + handler.set);
}
}
}

function ProxyPolyfill(target, handler) {
return proxyObject(new Internal(target, handler));
}

/**

  • Proxy object 这里是核心关键,使用 Object.create 的方式与 目标对象建立绑定关系

  • @param {Internal} internal

  • @returns {object}
    */
    function proxyObject(internal) {
    var target = internal.target;
    var descMap, newProto;

    descMap = observeProto(internal);
    newProto = Object.create(Object.getPrototypeOf(target), descMap);

    descMap = observeProperties(target, internal);
    return Object.create(newProto, descMap);
    }

/**

  • Observe [[Prototype]]
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProto(internal) {
    var descMap = {};
    var proto = internal.target;
    while (proto = Object.getPrototypeOf(proto)) {
    var props = observeProperties(proto, internal);
    Object.assign(descMap, props);
    }
    descMap.__PROXY__ = {
    get: function () {
    return internal.target ? undefined : ‘REVOKED’;
    }
    };
    return descMap;
    }

/**

  • Observe properties
  • @param {object} obj
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProperties(obj, internal) {
    var names = Object.getOwnPropertyNames(obj);
    var descMap = {};
    for (var i = names.length – 1; i >= 0; –i) {
    descMap[names[i]] = observeProperty(obj, names[i], internal);
    }
    return descMap;
    }

理解代理模式,很形象的例子就是明星的经济人。

我希望能够让某位明星成为我的代言人,但是一般情况只能跟经济人洽谈。而不会跟明星直接联系。

经济人就是明星的代理。

生活中也有许多代理模式的案例。

例如我想购买飞机票,但是我可以不用直接在机场购买,我们小区楼下就有一家代理出售机票火车票的小机构。

解决跨域问题也可以使用代理。

浏览器中某一页面无法直接访问其他域名的接口。那如果就是有需求要访问其他域名的接口怎么办呢?

我在自己域名服务器下,创建一个代理。

浏览器访问自己域名服务器的代理接口,代理接口在服务端,不在浏览器,就不会有跨域限制,于是服务端的代理接口可以去访问其他域名的数据。这样就达到了目的。

五、4. 代理模式

代理模式的好处,在明星经济人这里体现的非常明显。

想要找赵丽颖谈商业合作的商家非常多,但是如何对比开价更高的商家,如何淘汰恶意捣乱的商家,如何应付诚意不足的商家,如何安排通告行程等等,这些乱七八糟的事情都由经济人来处理。

而赵丽颖只需要确定最终选择商家即可。代理模式让她避免了很多杂务。

在我们的代码设计中,代理模式,是为其他对象提供一种代理以控制对该对象的访问。

五、4. 代理模式

  • 代理对象,是对目标对象的一次封装
  • 代理对象可预先处理访问请求,再决定是否转交给目标对象
  • 代理对象和目标对象,对外提供的可操作性方式保持一致

针对不同的场景,实现代理的方式可能不一样。

在 JavaScript 中,提供了默认的 Proxy 对象,用于创建一个对象的代理。

const t = {m: 1} const p1 = new Proxy(t, {   get: function(obj, prop) {     return obj[prop]   } })  // 通过代理对象,访问目标对象 console.log(p1.m)  // 1  // 通过代理对象修改目标对象 p1.m = 2 console.log(t) // {m: 2}

Proxy 的第一个参数为目标对象,第二参数是监听事件,可以监听代理对象的访问与修改操作。这样的话,我们就可以利用代理对象,对目标对象的访问进行数据的劫持。

Vue3.0 正是利用了 Proxy 这样的特点,才能得以使用 Proxy 替换掉 getter/setter。

我们也可以自己实现一个 Proxy 对象。

ProxyPolyfill 简化版,仅仅只提供了 Object 的兼容。仅供参考阅读

``js class Internal { constructor(target, handler) { this.target = target this.handler = handler } get(property, receiver) { var handler = this.handler; if (handler.get == UNDEFINED) { return this.target[property]; } if (typeof handler.get === 'function') { return handler.get(this.target, property, receiver); } } set(property, value, receiver) { var handler = this.handler; if (handler.set == undefined) { this.target[property] = value; } else if (typeof handler.set === 'function') { var result = handler.set(this.target, property, value, receiver); if (!result) { console.error(set 异常: ${property}`)
}
} else {
console.error(“Trap ‘set’ is not a function: ” + handler.set);
}
}
}

function ProxyPolyfill(target, handler) {
return proxyObject(new Internal(target, handler));
}

/**

  • Proxy object 这里是核心关键,使用 Object.create 的方式与 目标对象建立绑定关系

  • @param {Internal} internal

  • @returns {object}
    */
    function proxyObject(internal) {
    var target = internal.target;
    var descMap, newProto;

    descMap = observeProto(internal);
    newProto = Object.create(Object.getPrototypeOf(target), descMap);

    descMap = observeProperties(target, internal);
    return Object.create(newProto, descMap);
    }

/**

  • Observe [[Prototype]]
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProto(internal) {
    var descMap = {};
    var proto = internal.target;
    while (proto = Object.getPrototypeOf(proto)) {
    var props = observeProperties(proto, internal);
    Object.assign(descMap, props);
    }
    descMap.__PROXY__ = {
    get: function () {
    return internal.target ? undefined : ‘REVOKED’;
    }
    };
    return descMap;
    }

/**

  • Observe properties
  • @param {object} obj
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProperties(obj, internal) {
    var names = Object.getOwnPropertyNames(obj);
    var descMap = {};
    for (var i = names.length – 1; i >= 0; –i) {
    descMap[names[i]] = observeProperty(obj, names[i], internal);
    }
    return descMap;
    }

理解代理模式,很形象的例子就是明星的经济人。

我希望能够让某位明星成为我的代言人,但是一般情况只能跟经济人洽谈。而不会跟明星直接联系。

经济人就是明星的代理。

生活中也有许多代理模式的案例。

例如我想购买飞机票,但是我可以不用直接在机场购买,我们小区楼下就有一家代理出售机票火车票的小机构。

解决跨域问题也可以使用代理。

浏览器中某一页面无法直接访问其他域名的接口。那如果就是有需求要访问其他域名的接口怎么办呢?

我在自己域名服务器下,创建一个代理。

浏览器访问自己域名服务器的代理接口,代理接口在服务端,不在浏览器,就不会有跨域限制,于是服务端的代理接口可以去访问其他域名的数据。这样就达到了目的。

五、4. 代理模式

代理模式的好处,在明星经济人这里体现的非常明显。

想要找赵丽颖谈商业合作的商家非常多,但是如何对比开价更高的商家,如何淘汰恶意捣乱的商家,如何应付诚意不足的商家,如何安排通告行程等等,这些乱七八糟的事情都由经济人来处理。

而赵丽颖只需要确定最终选择商家即可。代理模式让她避免了很多杂务。

在我们的代码设计中,代理模式,是为其他对象提供一种代理以控制对该对象的访问。

五、4. 代理模式

  • 代理对象,是对目标对象的一次封装
  • 代理对象可预先处理访问请求,再决定是否转交给目标对象
  • 代理对象和目标对象,对外提供的可操作性方式保持一致

针对不同的场景,实现代理的方式可能不一样。

在 JavaScript 中,提供了默认的 Proxy 对象,用于创建一个对象的代理。

const t = {m: 1} const p1 = new Proxy(t, {   get: function(obj, prop) {     return obj[prop]   } })  // 通过代理对象,访问目标对象 console.log(p1.m)  // 1  // 通过代理对象修改目标对象 p1.m = 2 console.log(t) // {m: 2}

Proxy 的第一个参数为目标对象,第二参数是监听事件,可以监听代理对象的访问与修改操作。这样的话,我们就可以利用代理对象,对目标对象的访问进行数据的劫持。

Vue3.0 正是利用了 Proxy 这样的特点,才能得以使用 Proxy 替换掉 getter/setter。

我们也可以自己实现一个 Proxy 对象。

ProxyPolyfill 简化版,仅仅只提供了 Object 的兼容。仅供参考阅读

``js class Internal { constructor(target, handler) { this.target = target this.handler = handler } get(property, receiver) { var handler = this.handler; if (handler.get == UNDEFINED) { return this.target[property]; } if (typeof handler.get === 'function') { return handler.get(this.target, property, receiver); } } set(property, value, receiver) { var handler = this.handler; if (handler.set == undefined) { this.target[property] = value; } else if (typeof handler.set === 'function') { var result = handler.set(this.target, property, value, receiver); if (!result) { console.error(set 异常: ${property}`)
}
} else {
console.error(“Trap ‘set’ is not a function: ” + handler.set);
}
}
}

function ProxyPolyfill(target, handler) {
return proxyObject(new Internal(target, handler));
}

/**

  • Proxy object 这里是核心关键,使用 Object.create 的方式与 目标对象建立绑定关系

  • @param {Internal} internal

  • @returns {object}
    */
    function proxyObject(internal) {
    var target = internal.target;
    var descMap, newProto;

    descMap = observeProto(internal);
    newProto = Object.create(Object.getPrototypeOf(target), descMap);

    descMap = observeProperties(target, internal);
    return Object.create(newProto, descMap);
    }

/**

  • Observe [[Prototype]]
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProto(internal) {
    var descMap = {};
    var proto = internal.target;
    while (proto = Object.getPrototypeOf(proto)) {
    var props = observeProperties(proto, internal);
    Object.assign(descMap, props);
    }
    descMap.__PROXY__ = {
    get: function () {
    return internal.target ? undefined : ‘REVOKED’;
    }
    };
    return descMap;
    }

/**

  • Observe properties
  • @param {object} obj
  • @param {Internal} internal
  • @returns {object} descriptors
    */
    function observeProperties(obj, internal) {
    var names = Object.getOwnPropertyNames(obj);
    var descMap = {};
    for (var i = names.length – 1; i >= 0; –i) {
    descMap[names[i]] = observeProperty(obj, names[i], internal);
    }
    return descMap;
    }

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 五、4. 代理模式求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们