关于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永远指向用当前构造函数创建的对象