用javascript实现完全的类(private、pubulic等)
js是面向对象的,但是其不像java一样完全的面向对象,但是利用其灵活性,我们可以使用它进行高度的模拟,来看下面的代码:
function Student(name){ this.name=name;//public变量 var id=Math.random()*100; //private变量 function setId(newId){ id=newId; }//private方法 var that=this; this.getId=function(){ /// }//特权方法 } Student.prototype.getName=function(){ return this.name; }//public方法
是的,通过上面的方法便可以模拟出一个标准的类。ok,我们总结一下:
- 私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。
- 私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用。
- 特权方法 通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。
- 公共属性 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。
- 公共方法 通过ClassName.prototype.methodName=function(){...}来定义而且可以从对象外部来调用。
- 原型属性 通过ClassName.prototype.propertyName=someValue来定义。
- 静态属性 通过ClassName.propertyName=someValue来定义。(也就工具属性和方法)
- 我认为可以简单的把privileged方法简单的看成是构造函数里的public方法,因为privileged方法可以被外界和public方法访问, 而它自身又可以访问private变量。