当前位置: 代码迷 >> JavaScript >> 怎么传递“全局变量”
  详细解决方案

怎么传递“全局变量”

热度:362   发布时间:2012-05-28 17:59:54.0
如何传递“全局变量”
JScript code

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楼 用定义为一个类的方法,是正解

如果不明白面向对象的方式,还有种方法,把定时器作为局部变量,执行函数时将其存入一个全局数组,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]);
}}

------解决方案--------------------
JScript code

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,
    // 是和类相关的,而不是和实例相关的。
    
}

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