<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> <head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title> prototype </title> 
<script type="text/javascript"> 
function getInput(name,objID1,objID2){ 
  this.name=name; 
  this.obj1=objID1; 
  this.obj2=objID2; 

getInput.prototype.init = function(){
  document.getElementById(this.obj2).onkeyup = (function () {
        var wc = this;
        return function (event) {
              wc.prn(event);
        }
    }).call(this);

getInput.prototype.prn = function(){ 
    alert(document.getElementById(this.obj1).value+"&"+document.getElementById(this.obj2).value);
} window.onload = function () {
    var gI = new getInput('gI','inp1','inp2'); 
    gI.init();
}
</script>
</head><body>
<input type="text" id="inp1"/><br/> 
<input type="text" id="inp2"/> 
</body> </html>中的这段代码是什么意思?
getInput.prototype.init = function(){
  document.getElementById(this.obj2).onkeyup = (function () {
        var wc = this;
        return function (event) {
              wc.prn(event);
        }
    }).call(this);

解决方案 »

  1.   

    getInput.prototype调用对象getInput的原型,getInput.prototype.init=function()给类getInput添加原型方法,使得以后所有的getInput类的对象都拥有init方法,下面的是方法内容
    function(){ 
        document.getElementById(this.obj2).onkeyup   =   (function   ()   { 
                    var   wc   =   this; 
                    return   function   (event)   { 
                                wc.prn(event); 
                    } 
            }).call(this); 
    }  
      

  2.   

    楼上的朋友我表达有问题了,我想知道的是getInput.prototype.init   =   function(){ 
        document.getElementById(this.obj2).onkeyup   =   (function   ()   { 
                    var   wc   =   this; 
                    return   function   (event)   { 
                                wc.prn(event); 
                    } 
            }).call(this); 
    }   每一行代码的意思是什么?
      

  3.   

    document当前文档对象,document.getElementById根据HTML文档对象的id属性访问文档中的某个节点,document.getElementById(this.obj2)其中this当前对象的引用,这里引用getInput对象,this.obj2调用当前对象的obj2属性,document.getElementById(this.obj2).onkeyup访问获取的HTML文档对象节点的onkeyup(键盘弹起事件)方法,并把(function (){   
            var       wc       =       this;   
            return       function       (event)       {   
                wc.prn(event);   
            }   
        }).call(this);
    -_-||解释的真累,劝楼主还是找本javascript书好好看看基础吧!推荐javascript权威指南
      

  4.   

    http://topic.csdn.net/u/20071113/09/61d182cc-5436-46f8-a886-374d0b1a70a7.html  这个是上午问的问题
      

  5.   

    function () {}
    是函数- -(function () {})返回这个函数(function () {})()执行返回的这个函数还有哪行不明白?
      

  6.   

    muxrwc講得有點太深了. call和apply的應用新人是比較難理解的.
    其實和我下麵的代碼沒什麽區別
    function getInput(name,objID1,objID2){
      this.name=name;
      this.obj1=objID1;
      this.obj2=objID2;
    }
    getInput.prototype.init=function(){
        var This = this;//建立一个闭包变量 做为this的引用
    //将this.prn这个function放在这个闭包体内,这样在这个function内就可以访问到This这个this的引用.
        this.prn=function()
        {
            alert(document.getElementById(This.obj1).value+"&"+document.getElementById(This.obj2).value);
        }
        document.getElementById(this.obj2).onkeyup=this.prn;//该条出错,说为空或不是对象,想知道如何能把input对象以参数形式传入并定义事件等
    }
    var gI=new getInput('gI','inp1','inp2');
    gI.init();
    再参考muxrwc的代码
    getInput.prototype.init = function(){
    document.getElementById(this.obj2).onkeyup = (
    //这个function其实是做为一个闭包体存在
    function () {
    var wc = this;//这个就是我上面的This变量 一样的
    //下面这个function才是返回的真正onkeyup的语句柄 它存在于这个闭包内所以可以访问到wc这个this的引用
    return function(event){
       wc.prn(event);
    }
    }).call(this);//这个call有点特殊说实在不用也没关系 其实就是吧这个闭包体内的this元素指定为call()的参数,其实还是this.
      

  7.   

    lip009 你解释那几句我都懂,我就不懂你没解释那几句
      

  8.   


    <script type="text/javascript">
    (function () {
    alert(1);
    }).call()
    //这个就是执行一个函数
    </script>
    <script type="text/javascript">
    var a = {};
    (function () {
    alert(a === this);
    }).call(a);
    //call的第一个参数其实就是改变执行的这个函数的this的
    </script>
    <script type="text/javascript">
    var a = {};
    var s = (function () {
    var wc = this;
    return function () {
    alert(1);
    };
    }).call(a);alert(s);
    //执行一个函数。然后返回内容给s
    //返回的内容是一个函数是 这个函数function () { alert(1); }
    </script>
    <script type="text/javascript">
    var a = {};
    a.name = "back";
    var s = (function () {
    var wc = this;
    return function () {
    alert(wc.name); //这里返回的函数,用到了wc这个变量所以产生了闭包
    };
    }).call(a);alert(s);s(); //这样执行的时候就显示了back
    </script>