访问者模式

访问者模式一般来说是把多种类型对象的共同操作抽象起来,放到一个函数里,然后以对象为参数,在函数里统一执行操作。类似于c++的多态,以子类指针或者引用为函数参数,然后根据传进来的对象类型,执行他所对应的方法。这个前提是,多个对象都具有相同的操作,但是不同的对象具体执行的代码可以不同。而在js里,是弱类型的,只要某个对象具有相应的方法就能被执行,这个传入的对象可以是函数参数或者this,c++里传入的对象要和形参对象在同一继承链上,并且是他的后代。

var objA = {
name:'hello',
showName: function() {
console.log(this.name)
}
}

var objB = {
name:'world',
showName: function() {
console.log(this.name)
}
}

function showInfo(obj) {
obj.showName();
}


showInfo(objA);

例子中showInfo函数是一个抽象出来的函数,这就是访问者,他负责统一访问传入对象的内容。js中,访问者只关心传入的对象能干嘛,而不关心他的类型。也就是说只要有某个方法或者属性就行,更直接点就是只要访问者里的代码执行而不出错就行,但是能执行不代表可以达到预期效果,所以还需要一定的前提。

在js中,数组Array原型中就有很多方法是访问者模式,比如push,push函数的源码类似于

Array.prototype.push=function(arg){

this[this.length++]=arg;

}

push函数就是一个访问者,不过他要访问的对象是this而不是函数形参。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值