Skip to content

Latest commit

 

History

History
33 lines (26 loc) · 1 KB

File metadata and controls

33 lines (26 loc) · 1 KB

三. 代理模式

由于一个对象不能直接引用另一个对象,所以需要代理对象在这两个对象之间起到中介的作用

// 先声明美女对象
var girl = function(name) {
  this.name = name;
};

// 这是dudu
var dudu = function(girl) {
  this.girl = girl;
  this.sendGift = function(gift) {
    alert('Hi ' + girl.name + ', dudu送你一个礼物:' + gift);
  };
};

// 大叔是代理
var proxyTom = function(girl) {
  this.girl = girl;
  this.sendGift = function(gift) {
    new dudu(girl).sendGift(gift); // 替dudu送花咯
  };
};

var proxy = new proxyTom(new girl('酸奶小妹'));
proxy.sendGift('999朵玫瑰');

假如 dudu 要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理

其实在日常开发中,我们遇到很多这种情况,比如跨域,之前总结过跨域的所有东西,其中的 jsonp,window.name 还是 location.hash 都是通过代理模式来实现的。