各位大侠们,小弟有段是用js实现的过滤器链的代码,但总报错,请各位帮忙找找问题。function ValidateExcute(){
this.ValidateArr = new Array();
this.ValidateCount = 0;
this.addValidate=function(validate){

this.ValidateArr[this.ValidateCount++] = validate;
}
this.validate=function(){
alert("00000");
alert(this.ValidateArr.toString()); alert("99999");
}

}function Validate(){
this.validate = function(){
alert(validate);
}
}
var v = new ValidateExcute();v.addValidate(new Validate());
v.addValidate(new Validate());
v.validate();

解决方案 »

  1.   


    function ValidateExcute(){
        var _this = this;
        _this.ValidateArr = new Array();
        _this.ValidateCount = 0;
        _this.addValidate=function(validate){
            
            _this.ValidateArr[_this.ValidateCount++] = validate;
        }
        _this.validate=function(){
        alert("00000");
        alert(_this.ValidateArr.toString());    alert("99999");
        }
        
    }function Validate(){
        this.validate = function(){
            alert(validate);//这里你要干什么?不明白
        }
    }
      

  2.   

      alert(this.ValidateArr.toString());显示[Object Object],[Object Object]但调用this.ValidateArr[0].validate();却没反应。
    对js的oop不太了解,不太清楚他能不能转换类型。
    报错应该是没找到validate函数才对,但我在Validate中定义了validate函数的,所以不明白了。
      

  3.   

    明白了!!
     alert(validate);错了,哎,本想 alert('validate');的,给各位添麻烦了
      

  4.   


    function ValidateExcute(){
        var _this = this;//这句是个关键
        _this.ValidateArr = new Array();
        _this.ValidateCount = 0;
        _this.addValidate=function(validate){
    //你的问题是对this关键字还不是很了解造成的
    //如果你这里写的是this而非_this的话,this指向的是addValidate()函数
    //而不是你希望的指向ValidateExcute()
            _this.ValidateArr[_this.ValidateCount++] = validate;
        }
        _this.validate=function(){
         alert(_this.ValidateArr.toString());
        }
    }
    function Validate(){
        this.validate = function(){
            //TODO
        }
    }
    var v = new ValidateExcute();
    v.addValidate(new Validate());
    v.addValidate(new Validate());
    v.validate();