日期:2014-05-16  浏览次数:20353 次

关于this,高手进来指点一下
function   JSClass()
    {
            this.m_Text   =   'division   element ';
            this.m_Element   =   document.createElement( 'DIV ');
            this.m_Element.innerHTML   =   this.m_Text;
            //第一处,下面这句的this指什么东东?  
            this.m_Element.attachEvent( 'onclick ',   this.ToString);
    }
    //第二处,这句的this指什么东东?  
    JSClass.prototype.Render   =   function()
    {
            document.body.appendChild(this.m_Element);
    }          
    //第三处,这句的this指什么东东?
    JSClass.prototype.ToString   =   function()
    {
            alert(this.m_Text);
    };

    var   jc   =   new   JSClass();
    jc.Render();  
    jc.ToString();

以上三处的this分别指什么,大家帮忙看看,谢谢。

------解决方案--------------------
function JSClass()
{
this.m_Text = 'division element '; //定义了一个字符串
this.m_Element = document.createElement( 'DIV '); //建立了一个DIV元素
this.m_Element.innerHTML = this.m_Text; //将新建DIV元素m_Element中的内容改为第一个字符串m_Text的内容
this.m_Element.attachEvent( 'onclick ', this.ToString); //为DIV(m_Element)加载事件Onclick,点击时运行JSClass类的ToString方法。
}

JSClass.prototype.Render = function() //为JSClass类添加Render方法
{
document.body.appendChild(this.m_Element); //将JSClass类中的m_Element元素加载到页面的Body对象中。
}

JSClass.prototype.ToString = function() //为JSClass类添加ToString方法
{
alert(this.m_Text); //将JSClass类中的m_Text中的内容用Alert的方法显示
};

var jc = new JSClass(); //新建一个实例
jc.Render();  //运行JSClass的Render方法,将jc中的DIV放到BODY中
jc.ToString(); //显示jc.m_Text的内容

------解决方案--------------------
你在构造对象的时候没有给参数当然是undefined
你用下面的语句尝试一下就知道了
var jc = new JSClass( 'a ', 'b ', 'c '); //新建一个实例
jc.Render();  //运行JSClass的Render方法,将jc中的DIV放到BODY中
jc.ToString(); //显示jc.m_Text的内容

------解决方案--------------------
var jc = new JSClass();

//jc.Render(); 你这样调用body对象没有生存``会出错` 注释就可以看到效果了

jc.ToString();

或者
window.onload = function(){
var jc = new JSClass();
jc.Render();
jc.ToString();
}
------解决方案--------------------
this永远指向用当前构造函数创建的对象