静态:共享
一、公有静态成员(作为函数的属性即可):
1 var Gadget = function(price) { 2 this.price = price; 3 } 4 Gadget.isShiny = function(){ 5 var msg = 'you bet';//公有静态 6 if(this instanceof Gadget){//实例调用时 7 msg += ', it costs ' + this.price + '!'; 8 } 9 return msg; 10 } 11 Gadget.prototype.isShiny = function(){ 12 return Gadget.isShiny.call(this) 13 } 14 15 console.log(Gadget.isShiny());//you bet 此为静态调用 16 var a = new Gadget(23); 17 console.log(a.isShiny());//you bet, it costs 23! 此为实例调用
二、私有静态成员:
私有:构造函数外部不可访问
静态:所有实例共享
通过即时函数创建作用域存放
1 var Person; 2 (function(){ 3 var id = 0;//私有 4 Person = function(){ 5 id ++; 6 this.id = id; 7 } 8 Person.prototype.getId = function(){ 9 console.log(this.id); 10 } 11 Person.prototype.getLastId = function(){ 12 console.log(id); 13 } 14 15 })(); 16 17 18 var p1 = new Person(); 19 p1.getLastId();//1 20 p1.getId();//1 21 22 var p2 = new Person(); 23 p2.getLastId();//2 24 p2.getId()//2 25 26 var p3 = new Person(); 27 p3.getLastId();//3 28 p3.getId();//3 29 30 31 p1.getId();//1 32 p2.getId();//2 33 p3.getId();//3
注:JavaScript设计 P108-111 略变