在看视频时发现的一个小问题:
<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有什么区别?怎么感觉像是对象和类的感觉。。刚开始学,求赐教~
<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有什么区别?怎么感觉像是对象和类的感觉。。刚开始学,求赐教~
解决方案 »
- URL问题
- 问个有点难的隐藏菜单的问题!高手优先进入!
- 数组里的数据比较大小的疑惑, 敬请指教
- 关于正则表达式的match的$1-$9
- 菜鸟求个js写个下拉框,应该简单.
- 接着问:怎样暂时将页面上的 “一片” 元素设为不可见?用来控制不同情况下显示完全不同的页面
- [散分]大家新年好啊。祝身体健康,万事如意。
- 一个子窗口如何调用父窗口的对象?子窗口如何与父窗口通信?最好给出code!今日内送分!
- 我有许多链接<A name="oname" href="javascript:setname()">name</A>,请问在函数setname如何取得当前链接的name的值
- jquery this用法
- web服务器端的JS脚本调用exe文件问题?
- 按钮可不用不可用的问题
Person.flag类似于类变量,只有一个,只能用Person调用
this.username = "zhangsan";
this.password = "123";
function Person(){}
P大写了, 说明他模拟类, 相当于构造函数了.
调用的时候期望用 new Person(arg1, arg2, ...);
比如JS作为一门动态语言,没有预编译,他是如何区分this.username 和Person.flag的区别的呢?
我现在也能够猜想到可以用类似对象中定义的属性和类中定义的属性的区别来解释他们的不同,但是JS中不是没有类吗?
望高人指点,小弟洗耳恭听。。
而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对象的成员