转载
其实所有的OO语言都有这一机制。即多个实例如何共享方法。
JS中的每个instance都有一个属性proto指向prototype,而方法都定义在prototype中,通过这种机制实现方法共享。例如:
function Person(name){
this.name=name;
}
Person.prototype.printName=function(){
alert(this.name);
}
var person1=new Person('Byron');
var person2=new Person('Frank');
1)如果希望每个实例单独拥有的方法则定义到this 中:
function Obj(){
this.a=[]; //实例变量
this.fn=function(){ //实例方法
}
}
console.log(typeof Obj.a); //undefined
console.log(typeof Obj.fn); //undefined
var o=new Obj();
console.log(typeof o.a); //object
console.log(typeof o.fn); //function
2) 静态变量,函数
当定义一个函数后通过 “.”为其添加的属性和函数,通过对象本身仍然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数。
function Obj(){
}
Obj.a=0; //静态变量
Obj.fn=function(){ //静态函数
}
console.log(Obj.a); //0
console.log(typeof Obj.fn); //function
var o=new Obj();
console.log(o.a); //undefined
console.log(typeof o.fn); //undefined
3)私有变量,函数
在函数内定义的变量和函数如果不对外提供接口,那么外部将无法访问到。
function Obj(){
var a=0; //私有变量
var fn=function(){ //私有函数
}
}
var o=new Obj();
console.log(o.a); //undefined
console.log(o.fn); //undefined