function myFunction() {
    if (typeof value1 != "undefined") {//没有这一句,value1好像会有不同的整数值。
        return;
    }
    var i = 0;
    value1 = setInterval(function () {
        if (i == 0) {
           //function1
            i++;
        }
        else {
            //function2
            i--;
        }
    }, 1000);
}
function clear_myFunction() {
    if (typeof value1 == "undefined") {
        return;
    }
    clearInterval(value1);
    delete value1;
}
//value1没有预先定义
//现在我要执行几十次myFunction,代码里面不同的地方只有value1,value2,value3,……
//如何把一个没有定义的变量传到myFunction里面,让它成为全局变量
//clear_myFunction也能根据参数删除定时器的全局变量请问如何封装这个函数?

解决方案 »

  1.   

    <html>
    <body>
        <div>
        </div>
        <script type="text/javascript"> 

    var MyClass = function(){}

    MyClass.prototype.myFun = function(){
    alert(this.val);
    var i = 0;
    MyClass.val = setInterval(function () {
    if (i == 0) {
    //your funciton
    i++;
    }
    else {
    //your funciton
    i--;
    }
    //for test
    document.getElementById("lblMsg").innerHTML = i;
    }, 1000);
    }

    MyClass.prototype.clearFun = function(){
    alert(MyClass.val);
    clearInterval(MyClass.val);
    }

    /*static method*/
    var myClass = {
    myFunction: function(){
    var i = 0;
    alert(i);
    myClass.val = setInterval(function () {
    if (i == 0) {
    //your funciton
    i++;
    }
    else {
    //your funciton
    i--;
    }
    //for test
    document.getElementById("lblMsg").innerHTML = i;
    }, 1000);
    },
    clearFun: function(){
    clearInterval(myClass.val);
    }
    }
      
        window.onload = function(){
    //1. 需要实例化
    var myInstance = new MyClass();
    myInstance.myFun();
    btn.onclick = myInstance.clearFun;

    //2. 类似于静态方法
    //myClass.myFunction();
    //btn.onclick = myClass.clearFun;
        }
        </script>
        <a href="#" id="lblMsg">for test</a><br/>
        <input type="button" id="btn" value="stop" />
    </body>
    </html>
      

  2.   

    1楼 用定义为一个类的方法,是正解如果不明白面向对象的方式,还有种方法,把定时器作为局部变量,执行函数时将其存入一个全局数组,clear_myFunction删除全局数组中所有保存的定时器,就ok了。var vals=new Array();
    function myFunction() {
        //if (typeof value1 != "undefined") {
         //   return;
        //}
        var i = 0;
        var value1 = setInterval(function () {
            if (i == 0) {
               //function1
                i++;
            }
            else {
                //function2
                i--;
            }
        }, 1000);
        vals.push(value1);}
    function clear_myFunction() {
        //if (typeof value1 == "undefined") {
        //    return;
       // }
        for(var i=0;i<=vals.length-1;i++)
       {
        clearInterval(vals[i]);
       }
    }
      

  3.   


    MyClass.prototype.myFun = function(val){//我需要把val传进来
        var i = 0;
        MyClass.val = setInterval(function () {
        if (i == 0) {
            //your funciton
            i++;
        }
        else {
            //your funciton
            i--;
        }
    }
    //能不能这样调用myFun?
    var myInstance = new MyClass();
    myInstance.myFun(val1);
    myInstance.myFun(val2);
    myInstance.myFun(val3);
    //能不能这样调用clearFun?
    myInstance.clearFun(val1);
    myInstance.clearFun(val2);
    myInstance.clearFun(val3);
      

  4.   


    var MyClass = function(){
        this.val = 0;
    }MyClass.prototype.myFun = function(){
    var i = 0;
    this.val = setInterval(function () {
    if (i == 0) {
    //your funciton
    i++;
    }
    else {
    //your funciton
    i--;
    }
    }, 1000);
    }MyClass.prototype.clearFun = function(){
    clearInterval(this.val);
    }window.onload = function(){
        //1. 需要实例化
        var myInstance1 = new MyClass();
        var myInstance2 = new MyClass();
        var myInstance3 = new MyClass();
        var myInstance4 = new MyClass();
                   .
                   .
        //这样就可以了啊,和C#的面向对象思想一样的。
        // MyClass = {.....} 这种方式不行,因为MyClass.val 相当于是static field,
        // 是和类相关的,而不是和实例相关的。
        
    }
      

  5.   

    楼上可以,每一个new出来的对象内部都有一个属于自己的val,因此不需要传值的
    var myInstance1 = new MyClass();
    myInstance1.myFun();// 运行
    myInstance1.clearFun();// 清除