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

新手求教!JS对象创建问题
在看视频时发现的一个小问题:
<java code>

<script type="text/javascript">

function Person()
{
this.username = "zhangsan";
this.password = "123";

if(typeof Person.flag == "undefined")
{
alert("invoked");

Person.prototype.getInfo = function()
{
alert(this.username + "," + this.password);
}

Person.flag = true;
}
}

var p = new Person();
var p2 = new Person();

p.getInfo();
p2.getInfo();

</script>






</java code>
在上面代码中,this.username变量和Person.flag有什么区别?怎么感觉像是对象和类的感觉。。刚开始学,求赐教~

------解决方案--------------------
this.username类似于成员变量,每个对象都有一个,
Person.flag类似于类变量,只有一个,只能用Person调用
------解决方案--------------------
JScript code

this.username = "zhangsan";
this.password = "123";

------解决方案--------------------
http://blog.csdn.net/thedolphin/article/details/7177067
探讨

JScript code

this.username = "zhangsan";
this.password = "123";



function Person(){}
P大写了, 说明他模拟类, 相当于构造函数了.
调用的时候期望用 new Person(arg1, arg2, ...);

------解决方案--------------------
Person.flag是类变量 其实在某种程度上你也可以把它看做是一个全局变量,之所以加上类名是为了防止变量名重复而覆盖了其中一个
而this.username中的this指的是调用username的对象,var p = new Person();此时this.username是p.username
var p2 = new Person();此时的this.username是p2.username,他们的值虽然相等(初始化的关系)但他们其实是两个完全没关系的变量 就类似于两个处在不同函数里的局部变量
------解决方案--------------------
等效理解:
Person是构造函数
this.username是共有成员
Person.flag是类的静态成员,属于类不属于对象,所以只能用类名调用
当然由于js是弱类型,实际情形是:
所有函数都可以用于构造对象,函数中的this.xx可以给所构造的对象添加成员,
而且函数Person也是一个对象,js是可以在任何时候为对象添加成员的,只要赋值,就有了这个成员,
所以Person.flag=。。就是给Person对象添加了一个成员,和Person函数构造的对象无关,
所以实际区别就是:
this.username是用Person构造的对象的成员
Person.flag是Person对象的成员