以下是在两个对象之间建立通信的javascript代码
var ob = function(){
this.partnersArray=[];
};
ob.prototype.func = function(data){
console.log(data);
};
ob.prototype.setPartner = function(obj){
this.partnersArray.push(obj);
};
ob.prototype.comm = function(data){
for(var i=0;i<this.partnersArray.length;i++)
this.partnersArray[i].func(data);
};
var o1 = new ob();
var o2 = new ob();
var o3 = new ob();
o1.setPartner(o2);
o1.setPartner(o3);
//o1,o2 and o1,o3 are partners, but o2 ,o3 are not partners
o2.setPartner(o1);
o3.setPartner(o1);
o1.comm("hello");
是否可以覆盖ob.prototype.func 例如
o2.func->function(data){
var s=data+" !!!"; //do something belong to o2
console.log(s);
};
o3.func->function(data){
var s=data+" ???"; //do something belong to o3
console.log(s);
};
我的意思是如果o1有多个伙伴,每个人都有自己的.func从o1获取消息并做特殊事情。 上面的示例,如果o1.comm发送字符串“hello”
o2.func输出“你好!!!” o3.func输出“hello ???”
您的评论欢迎
答案 0 :(得分:0)
我发现了两种方式
var ob = function(name){
this.partnersArray=[];
this.name = name;
};
ob.prototype.func = function(data){
alert(this.name + ' : ' +data + this.behavior);
};
ob.prototype.setPartner = function(obj, behavior){
this.partnersArray.push(obj);
obj.func = function(data){
alert(this.name + ' : ' +data + (behavior?behavior:''));
};
};
ob.prototype.comm = function(data){
for(var i=0;i<this.partnersArray.length;i++)
this.partnersArray[i].func(data);
};
var o1 = new ob('1');
var o2 = new ob('2');
var o3 = new ob('3');
o1.setPartner(o2, '!!!');
o1.setPartner(o3);
//o2 ,o3 are not partner
o2.setPartner(o1);
o3.setPartner(o1);
o1.comm("hello");
或者
var ob = function(name){
this.partnersArray=[];
this.name = name;
this.behavior = '';
};
ob.prototype.func = function(data){
alert(this.name + ' : ' +data + this.behavior);
};
ob.prototype.setPartner = function(obj, behavior){
this.partnersArray.push(obj);
if(behavior != null)
obj.behavior = behavior;
};
ob.prototype.comm = function(data){
for(var i=0;i<this.partnersArray.length;i++)
this.partnersArray[i].func(data);
};
var o1 = new ob('1');
var o2 = new ob('2');
var o3 = new ob('3');
o1.setPartner(o2, '!!!');
o1.setPartner(o3);
//o2 ,o3 are not partner
o2.setPartner(o1);
o3.setPartner(o1);
o1.comm("hello");
答案 1 :(得分:0)
为什么不简单地覆盖它们?您的示例伪代码基本上是您需要做的:
o2.func = function(data){
var s=data+" !!!"; //do something belong to o2
console.log(s);
};
o3.func = function(data){
var s=data+" ???"; //do something belong to o3
console.log(s);
};