覆盖javascript方法启用

时间:2013-11-18 03:41:43

标签: javascript

以下是在两个对象之间建立通信的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 ???”

您的评论欢迎

2 个答案:

答案 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);
};