JS中公共/私有变量和方法
私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。
私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用。
特权方法
通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。
公共属性 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。
公共方法 通过ClassName.prototype.methodName=function(){...}来定义而且可以从对象外部来调用。
原型属性 通过ClassName.prototype.propertyName=someValue来定义。
静态属性 通过ClassName.propertyName=someValue来定义。
静态方法的定义方式是:
类名.方法名 = function(参数1,参数2...参数n){//方法代码}//和静态属性一样不能被实例化对象调用只能被类名字调用
另外注意下这种写法: var 函数名=function 函数名(){...} 这个函数被调用时具有特权函数和私有函数的特性。
//定义一个javascript类 --------这里要求成员属性和方法必须使用this来引用---
function JsClass(privateParam, publicParam) {//构造函数
var priMember = privateParam; //私有变量
this.pubMember = publicParam; //公共变量
// 定义私有方法
function priMethod() {
return "priMethod()";
}
// 定义特权方法
this.pubMethod1 = function () {
both(); //这种公用方法可以调用私有方法和属性
return "pubMethod1()";
}
// 定义特权方法 (保护方法)
//特权方法可以访问所有成员
this.privilegedMethod = function () {
var str = "这是特权方法,我调用了\n";
str += " 私有变量:" + priMember + "\n";
str += " 私有方法:" + priMethod() + "\n";
str += " 公共变量:" + this.pubMember + "\n";
str += " 公共方法:" + this.pubMethod();
return str;
}
//函数这样定义时,当它被调用时具有特权函数和私有函数的特性。
var both = function bothFunction() {
alert("bothFunction");
}
}
//添加公共方法
//不能调用私有变量和方法
JsClass.prototype.pubMethod2 = function () {
both(); //这里不能调用私有方法,会报错
return "pubMethod2()----";
}
// 使用 JsClass的实例
JsObject = new JsClass("priMember111", "pubMember222");
//alert(JsObject.pubMember);//弹出pubMember信息
// alert(JsObject.priMember);//弹出undefined信息
//alert(JsObject.pubMethod1()); //弹出pubMethod信息
alert(JsObject.pubMethod2()); //弹出prototype.pubMethod信息
//alert(JsObject.priMethod()); //弹出"对象不支持此属性或方法"的错误
// alert(JsObject.privilegedMethod());
//alert(JsObject.both());
Javascript的public、private和privileged模式