function A(){this.id = "我是AA"} // 在构造函数外定义的都是所有对象共享的
A.id = "我是A";
A.sayId = function(){alert(A.id);}
A.sayId();
如上,在构造函数外用函数名定义的属性或者方法,可以也只可以通过函数名来访问,这和C++基本一样。
输出
试图访问非静态变量时
function A(){this.id = "我是AA"} // 在构造函数外定义的都是所有对象共享的
A.id = "我是A";
A.sayName = function(){alert(this.id);}
A.sayName();
输出
说明访问不了。
再看看this是什么
那么如果用prototype呢?
function A(){this.id = "我是AA"} // 在构造函数外定义的都是所有对象共享的
A.prototype.id = "我是A";
A.prototype.sayName = function(){alert(this.id);}
a = new A();
a.sayName();
输出
说明:
1、输出"我是AA"是因为"我是A"是在之后赋值的,把"我是A"覆盖了。
2、prototype指向的是一个Object对象,注意它是一个对象,当使用prototype时(或者是定义函数后),会产生一个Object对象,等同于 object = new Object();
3、通过prototype添加的属性和方法不是静态的,只能通过对象来访问。