先说问题3 传参数,如果只是字符串,比较简单<script language="javascript">
function getObject(str)
{
alert(str)
}
var a="aa"
setTimeout("getObject('"+a+"')",1000)
</script>如果传对象<input name="aa" value="haha">
<script language="javascript">
var _st = window.setTimeout;
window.setTimeout = function(fRef,mDelay)
{
if(typeof fRef =="function")
{
var argu=Array.prototype.slice.call(arguments,2);
var f=(
function(){
fRef.apply(null, argu);
}
);
return _st(f,mDelay);
}
return _st(fRef,mDelay);
}
function getObject(obj)
{
alert(obj.value)
}
var a=document.getElementById("aa") setTimeout(getObject,1000,a)
</script>

解决方案 »

  1.   

    问题1:两个alert的间隔显然没有3秒,所以不是对象返回了再执行下一句<input name="aa" value="haha">
    <script language="javascript">
     var _obj1 = getObject("obj1"); //语句1 
    var _obj2 = getObject("obj2");    //语句2 
    i=0;
    function getObject(objName)
    {
    try{ 
            if(eval(objName)){ 
       return eval(objName);  
            } 
            else{ 
              setTimeout(function(){alert(objName+"haha"+(i++))},3000); 
            } 
            } 
            catch(ex){ 
          setTimeout(function(){alert(objName+"haha"+(i++))},3000); 
            } 
    }
    </script>
      

  2.   

    问题2最好调整下顺序,把初始化的那部分都写到setTimeout里就好了
      

  3.   

    <script>
    var _obj1 = getObject("obj1"); //语句1 
    var _obj2 = getObject("obj2");    //语句2
    function getObject(_obj){ 
    if(_obj=="obj1"){
    setTimeout(function(){alert(1);},3000)
    }
    else{alert(2)}
    }
    </script>
    一个简单的例子,你就清楚了先执行的是哪个
    虽然你的都使用了setTimeout,但实际上2已经开始运行了
    再举一个例子给你看
    <script>
    var _obj1 = getObject("obj1"); //语句1 
    var _obj2 = getObject("obj2");    //语句2
    function getObject(_obj){ 
    if(_obj=="obj1"){
    setTimeout(function(){alert(1);},3000)
    }
    else{setTimeout(function(){alert(2);},1000)}
    }
    </script>
      

  4.   

    问题3: 
    setTimeout(function(){getObject(_obj);},1);我这样写能不能实现传参数的 setTimeout方法调用? 
    这个是setTimeout方法可以实现传参数,但是不能达到
    问题1: 
    我的目的是语句1执行完以后,直到语句1的对象(obj1)返回了,才执行语句2,直到语句2的对象(obj2)返回了,此执行语句3 
    不知道我这样写是否能完成我的想法 你这个问题
      

  5.   

    问题2: 
    由于用了setTimeout,所以我不知道是否在任何情况下,都是执行了return eval(_obj);以后才会执行下一句! 
    例如:语句1是否得到return eval(_obj); 回值后才执行语句2! 
    并不一定是先得到return eval(_obj); 回值后才执行语句2
    如果你传的第一次不是对象的话,就回延时,一延时的话,语句2也进入了执行状态
      

  6.   

    汗糊涂了啊!var _obj1 = getObject("obj1"); //语句1 
    var _obj2 = getObject("obj2");    //语句2 
        //语句3 那要满足!语句1和2都保证
    _obj1,_obj2都已返回值了!并且都获得对象了!
    才执行语句3应该怎么写啊?
      

  7.   

    用下面的改一下应该就可以了!
    <script>
    var _obj1 = getObject("obj1"); //语句1 
    var _obj2 = getObject("obj2");    //语句2
    var _obj3 = getObject("obj3");    //语句3
    function getObject(_obj){ 
    if(_obj=="obj1"){
    setTimeout(function(){alert(1);},3000)
    }
    elseif {
     setTimeout(function(){alert(2);},1000)
    }
    else {
      setTimeout(function(){alert(3);},1000)
    }
    }
    </script>
      

  8.   

    用下面的改一下应该就可以了! 
    <script> 
    var _obj1 = getObject("obj1"); //语句1  
    var _obj2 = getObject("obj2");    //语句2 
    var _obj3 = getObject("obj3");    //语句3 
    function getObject(_obj){  
    if(_obj=="obj1"){ 
    setTimeout(function(){alert(1);},3000) 

    elseif { 
     setTimeout(function(){alert(2);},1000) 

    else { 
      setTimeout(function(){alert(3);},1000) 


    </script>这样不行吧?
    1.如果没有obj1对象的化就会报错!
    2.如果语句1执行以后!根本没有判断_obj1是否已经是对象了!
    就开始执行语句2了 
      

  9.   


     chinmo hbhbhbhbhb1021 
    .......
      

  10.   

    我的目的是语句1执行完以后,直到语句1的对象(obj1)返回了,才执行语句2,直到语句2的对象(obj2)返回了,此执行语句3  
    不知道我这样写是否能完成我的想法  
    使用setTimeout是无法达到你的这个效果的!!
      

  11.   

    我在之前的语句加载了一个.js文件!
    我通过getObject方法获得这个.js文件里面的一个对象!
    但是我无法知道这个.js文件什么时候加载完成!
    所以我想!直到这个对象确实存在了才说明加载完成了!
    才继续下面的语句!
    这个怎么写啊?
      

  12.   

    这个简单,使用onload调用init()这个函数,那么肯定是所有东西加载完毕才启用init()函数来判断对象是否存在
      

  13.   

    汗都是动态的
    要能使onload调用init()这个函数
    我还说什么啊!!!!!!!!!!!!!!!!
      

  14.   

    不管怎样,是不能使用setTimeout等延时
    如果你真的想那样执行完一个到一个的话,请用if else
    比如:var _obj1 = getObject("obj1"); //语句1 
    if(_obj1){
    var _obj2 = getObject("obj2"); //语句2 
    if(_obj2){
        //语句3
    }
    else{
    //这里执行_obj2不是对象的情况的语句
    }

    else{//这里执行_obj1不是对象的情况的语句} 
     
    只能使用这样的形式来显示
      

  15.   

    问题1/2似乎差不多.但是你这样是不行的.
    问题3,可以使用
    setTimeout("alert('aaa')", 10);
    这种方式来传参数,但是参数的定义区域需要注意一下.
      

  16.   

    这样不行啊~~~~~~~我用setTimeout是因为!这个对象是从一个被加载的js文件里面获得的!所以我需要如果第一次没有
    得到这个对象我就延迟一下而已!
    用if else的会造成由于js没有加载上而得不到对象的情况!
    我必须这些对象都得到啊
    --------------------------不管怎样,是不能使用setTimeout等延时 
    如果你真的想那样执行完一个到一个的话,请用if else 
    比如: var _obj1 = getObject("obj1"); //语句1  
    if(_obj1){ 
    var _obj2 = getObject("obj2"); //语句2  
    if(_obj2){ 
        //语句3 

    else{ 
    //这里执行_obj2不是对象的情况的语句 

    }  
    else{//这里执行_obj1不是对象的情况的语句}  
      
    只能使用这样的形式来显示
      

  17.   

    你难道不懂这些啊??
    这就是判断是否为对象的
    if(_obj1){//这里必须是对象才执行下面的  
    var _obj2 = getObject("obj2"); //语句2   
    if(_obj2){  
        //语句3  
    }  
    else{  
    //这里执行_obj2不是对象的情况的语句  
    }  
    }   告诉你了,使用setTimeout是没办法做到你的目的,而且使用使用if是肯定得到了对象才执行
      

  18.   

    你非要用什么setTimeout,那你就不要想着做:语句1执行完以后,直到语句1的对象(obj1)返回了,才执行语句2,直到语句2的对象(obj2)返回了,此执行语句3 
    这样的效果了
      

  19.   

    eval是多线程的吗? 
    function init(){
      var _obj1 = eval(str1); //语句1
      var _obj2 = eval(str2);    //语句2
        //语句3
    } 语句1还没执行完会执行到语句2吗?
    随便高诉你 判断 _obj1是否为对象,可以用 if(typeof(_obj1)=="object")