在看视频时发现的一个小问题:
<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有什么区别?怎么感觉像是对象和类的感觉。。刚开始学,求赐教~

解决方案 »

  1.   

    this.username类似于成员变量,每个对象都有一个,
    Person.flag类似于类变量,只有一个,只能用Person调用
      

  2.   


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

  3.   

    http://blog.csdn.net/thedolphin/article/details/7177067
      

  4.   

    可否讲的再深入点?
    比如JS作为一门动态语言,没有预编译,他是如何区分this.username 和Person.flag的区别的呢?
    我现在也能够猜想到可以用类似对象中定义的属性和类中定义的属性的区别来解释他们的不同,但是JS中不是没有类吗?
    望高人指点,小弟洗耳恭听。。
      

  5.   

    Person.flag是类变量  其实在某种程度上你也可以把它看做是一个全局变量,之所以加上类名是为了防止变量名重复而覆盖了其中一个
    而this.username中的this指的是调用username的对象,var p = new Person();此时this.username是p.username
    var p2 = new Person();此时的this.username是p2.username,他们的值虽然相等(初始化的关系)但他们其实是两个完全没关系的变量 就类似于两个处在不同函数里的局部变量
      

  6.   

    等效理解:
    Person是构造函数
    this.username是共有成员
    Person.flag是类的静态成员,属于类不属于对象,所以只能用类名调用
    当然由于js是弱类型,实际情形是:
    所有函数都可以用于构造对象,函数中的this.xx可以给所构造的对象添加成员,
    而且函数Person也是一个对象,js是可以在任何时候为对象添加成员的,只要赋值,就有了这个成员,
    所以Person.flag=。。就是给Person对象添加了一个成员,和Person函数构造的对象无关,
    所以实际区别就是:
    this.username是用Person构造的对象的成员
    Person.flag是Person对象的成员