var myConstructor = function(message){
//实例变量
this.message = message; //私有变量,外部不可见。用var声明的变量具有块作用域
var separator = '-';
var owner = this; //私有方法:只能在构造器内调用
function alertMessage(){
alert(owner.message);
//alert(this.message);则下面concatMessage()方法会显示undefined
} //与前面一样是私有方法
//注意:这种做法在脚本执行到该赋值语句之前 alertMessage()函数是不存在的。
//如果在该定义发生之前调用alertMessage()将会出错。
//var alertMessage =function (){
// alert(owner.message);
//} //特权方法(也是公有方法)。可访问内部私有变量,也能被外部调用
this.concatMessage = function(string){
this.message += separator + string;
alertMessage();
}
} //公有方法,但不是特权方法,不能访问separator变量。出错:separator is undefined
//去掉separator后可以正常工作
//myConstructor.prototype.concatMessage = function(string){
// this.message += separator + string;
// alert(this.message);
//} var two = new myConstructor('a');
//私有方法,外部不能调用
//two.alertMessage();
two.concatMessage('b');
注意:
1.由于私有和特权成员在函数的内部,因此在创建实例时,每个实例都会包含同样的私有和特权成员副本。所以实例越多,占用的内存也就越多。