<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
window.onload=function(){addele();pushspan();}
function addele(){
for(var i=0;i<1000;i++) {
var span=document.createElement("span");
span.setAttribute("id","span"+i);
document.body.appendChild(span);
}
}
function pushspan(){
var array=new Array();
var start=new Date();
var $=document.getElementById;//这样写貌似不怎么对啊!它的本意是将getElementById方法的内存地址赋值给变量$(此时$相当于是一个指针变量),在js中是否存在有指针变量?
for(var i=0;i<1000;i++){
var span=($)("#span"+i);
array.push(span);//push方法可以向数组末尾添加一个或者是多个元素,并返回新的的长度。
}
var $=jQuery;
var end=new Date();
alert("所花费的时间是:"+(end-start)+"毫秒");
}
</script>
</head><body>
</body>
</html>最近在学习jquery的时候,发现一本书上出现了上述代码,其中,我对用红色部分显示的代码,并不是很理解,其中用注释表明了我的大概思路。我不知道这样想对不对?但是在运行的时候是会报错的。说红色部分调用的对象无效!这是怎么回事?

解决方案 »

  1.   

    貌似不行
    var $=function(id){ return document.getElementById(id)};
    window.onload=function(){
    var a=$("test");
    alert(a.innerHTML);
    }
      

  2.   

    有些是不能引用的,要不出错。就同document.getELementById一样变量为object类型的为引用,非object类型一般是值传递
        var x = { a: 123 };
        alert(x.a)//123
        function oupdate(o) { o.a = '321'; }
        oupdate(x);
        alert(x.a)//321
        var i = 123;
        alert(i)//123
        function iupdate(i) { i = 321; }
        alert(i)//123
      

  3.   

    看着是可以的,写法没有问题
    js里面对象都是引用类型(也可以说指针,反正一个意思就是指向一个内存)
    js的函数也是对象,所以这样写应该是可以的,
    如果不行的话,不是这种写法的问题,可能是这个函数比较特殊(被保护?)而已,换个自己写的函数绝对不会有问题
      

  4.   

    经测试把document.getElementById赋值给变量是没有问题的,调用也不会出错,出错是其他原因
      

  5.   

    function Test(){
    //alert("sd");
    var $ = document.getElementById;
    var rc = $("ReasonCode");
    alert(rc.value);
    }
    我的就可以啊
      

  6.   

    发现问题了,是因为$加上了一个(),去掉就可以了!
    var span=($)("#span"+i);
    array.push(span);//push方法可以向数组末尾添加一个或者是多个元素,并返回新的的长度。
    }
      

  7.   

    理论上说是可以的,但js内部限制了这个做法。
    假设可以这样:
    var a = document.getElementById;
    那么
    a.alert = function() {
        ...
    }
    当a消失的时候,document.getElementById的改变还是被保留了下来。
    你可以这样操作
    document.getElementById.alert();
    这样,js的内部函数被改变了,岂不乱套了