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

实例化函数的时候为何这样?
<div id="tag">hehe</div>
<script type="text/javascript">
function classX(){
alert(this.obj)
this.obj= document.getElementById("tag");
}

var my = new classX();//第一次显示undefind
var my = new classX();//第二次也是undefind
</script>
在第一次实例化的时候不是已经赋值了obj对象了吗?不想在每次实例化的时候都赋值一次obj。不想写成全局对象。

------解决方案--------------------
还有
var my = new classX();//第一次显示undefind 
var my = new classX();//第二次也是undefind 
是实例化2个对象,和下面代码结果是一样的。
var my = new classX();//第一次显示undefind 
var you = new classX();//第二次也是undefind 
都是从新执行方法,那么this.obj就都是空,还没有赋值。你从新new也是重新给你分配村内,重新执行方法。而this.obj是方法内的变量,没有赋值之前就是空的。就算赋值完了,你在外面也不会获得的
------解决方案--------------------
var my = new classX();//第一次显示undefind 
var my = new classX();//第二次也是undefind 
为什么要使用一样的变量,要干什么?
明摆着重新初始化啊!!!当然是未定义啊
------解决方案--------------------
这是基本概念问题。
对classX来说,有两种用法,
1,一种是用作函数,比如 classX()这样来call它,那么this就是指它本身。
2,另一种是把它和new结合在一起用,作为构造函数来用那么,this指的不是它,而是每次生成的新的对象。对每次生成的新对象来说,this.obj总是未定义的。