function JSClass(){ 
this.m_Text = 'division element'; 
this.m_Element = document.createElement('DIV'); 
this.m_Element.innerHTML = this.m_Text; 
if(this.m_Element.attachEvent) 
this.m_Element.attachEvent('onclick', this.ToString); 

else if(this.m_Element.addEventListener) 
this.m_Element.addEventListener('click', this.ToString,false); 

else 
this.m_Element.onclick = this.ToString; 
}
JSClass.prototype.Render = function(){ 
document.body.appendChild(this.m_Element); 

JSClass.prototype.ToString = function(){ 
alert (this);              //这个地方的this是上面的this.m_Element吗??即那个‘DIV’?
alert(this.m_Text); 
alert(this == window); 
}
window.onload = function(){ 
var jc = new JSClass(); 
jc.Render(); 
jc.ToString(); 

解决方案 »

  1.   

    window.onload的时候alert (this)的this是那个jc.点击“division element”时候(实际是点击DIV)this就是那个DIVthis:被谁调用就是谁
      

  2.   

    改动一下,这样你会清楚些:
    <script>
    function JSClass(){ 
        this.m_Text = 'division element'; 
        this.m_Element = document.createElement('DIV'); 
        this.m_Element.id="我是DIV"
        this.m_Element.innerHTML = this.m_Text; 
        if(this.m_Element.attachEvent) 
            this.m_Element.attachEvent('onclick', this.ToString); 
        
        else if(this.m_Element.addEventListener) 
            this.m_Element.addEventListener('click', this.ToString,false); 
        
        else 
            this.m_Element.onclick = this.ToString; 
    }    
    JSClass.prototype.Render = function(){ 
        document.body.appendChild(this.m_Element); 

    JSClass.prototype.ToString = function(){ 
        alert (this.id);              //这个地方的this是上面的this.m_Element吗??即那个‘DIV’?
        alert(this.m_Text); 
        alert(this == window); 
    }    
    window.onload = function(){ 
        var jc = new JSClass(); 
        jc.id="我是jc"
        jc.Render(); 
        jc.ToString(); 
    } </script>
      

  3.   

    执行了发现点击的时候是window,这个不清楚,顺便学习~
      

  4.   

    对呀,看了toury讲的,懂些了。。
      

  5.   


    //定义了一个类JSClass
    function JSClass(){ 
        this.m_Text = 'division element'; 
        this.m_Element = document.createElement('DIV'); 
        this.m_Element.innerHTML = this.m_Text; 
        if(this.m_Element.attachEvent) 
            this.m_Element.attachEvent('onclick', this.ToString); 
        
        else if(this.m_Element.addEventListener) 
            this.m_Element.addEventListener('click', this.ToString,false); 
        
        else 
            this.m_Element.onclick = this.ToString; 
    }   
    //为JSClass类的原型定义了一个render方法,将导致每个JSClass的对象都有一个render方法,方法中的this指向任意一个JSClass对象
    JSClass.prototype.Render = function(){ 
        document.body.appendChild(this.m_Element); 

    //为JSClass的原型定义了一个ToString,将导致每个JSClass的对象都一个ToString方法,方法中的this指向任意一个JSClass对象
    JSClass.prototype.ToString = function(){ 
        alert (this);              //这个地方的this是上面的this.m_Element吗??即那个‘DIV’?
        alert(this.m_Text); 
        alert(this == window); 
    }
    //稍做修改,修改JSClass类的构造函数,让它带有参数
    function newJSClass(m_Text){ 
        this.m_Text = m_Text || 'division element'; 
        this.m_Element = document.createElement('DIV'); 
        this.m_Element.innerHTML = this.m_Text; 
        if(this.m_Element.attachEvent) 
            this.m_Element.attachEvent('onclick', this.ToString); 
        
        else if(this.m_Element.addEventListener) 
            this.m_Element.addEventListener('click', this.ToString,false); 
        
        else 
            this.m_Element.onclick = this.ToString; 
    }
    //新构造函数的原型与原构造函数一样
    newJSClass.prototype=JSClass.prototype;
    window.onload = function(){ 
        var jc = new JSClass(); 
        jc.Render(); 
        jc.ToString();//先后弹出[objcet objcet],'division element',false
        //试试新的构造函数
        jc=new newJSClass();
        jc.Render();
        jc.ToString();//先后弹出[objcet objcet],'division element',false
        jc=new newJSClass('abc');
        jc.Render();
        jc.ToString();//先后弹出[objcet objcet],'abc',false
    }希望能帮到你